sangwenwei 1 年間 前
コミット
f44d2d4978

+ 90 - 12
src/views/common/InvoiceReimbursementUpLoadComponent.vue

@@ -12,12 +12,12 @@
                :on-change="changes"
                :on-progress="uploadVideoProcess"
                :file-list="fileList">
-		<template v-if="auth==='view'&&uploadFlag===false" #tip>
-			<el-button :loading="loading" type="primary" size="default" :disabled="true"> 点击上传 </el-button>
-		</template>
-		<template v-else #trigger>
-			<el-button :loading="loading" type="primary" size="default"> 点击上传 </el-button> <span style="margin-left: 20px;font-size:14px;font-weight:normal;color:red;" type="primary"> 上传报销的数电发票xml文件</span>
-		</template>
+<!--		<template v-if="auth==='view'&&uploadFlag===false" #tip>-->
+<!--			<el-button :loading="loading" type="primary" size="default" :disabled="true"> 点击上传 </el-button>-->
+<!--		</template>-->
+<!--		<template v-else #trigger>-->
+<!--			<el-button :loading="loading" type="primary" size="default"> 点击上传 </el-button> <span style="margin-left: 20px;font-size:14px;font-weight:normal;color:red;" type="primary"> 上传报销的数电发票xml文件</span>-->
+<!--		</template>-->
     </el-upload>
     <div style="height: calc(100% - 80px);margin-top: 10px">
       <!-- 进度条 -->
@@ -50,13 +50,13 @@
             {{getSize(scope.row.size)}}
           </template>
         </el-table-column>
-        <el-table-column label="操作" width="200px" fixed="right" align="center">
-          <template  #default="scope">
-            <el-button text type="primary" key="01" icon="el-icon-download" size="small" @click="toHref(scope.row)" >下载</el-button>
-            <el-button text type="primary" key="02" icon="el-icon-delete" size="small"  @click="deleteById(scope.row, scope.$index,fileList)" :disabled="auth==='view'&&delFlag === false&&createBy!==scope.row.createBy.name">删除</el-button>
+<!--        <el-table-column label="操作" width="200px" fixed="right" align="center">-->
+<!--          <template  #default="scope">-->
+<!--            <el-button text type="primary" key="01" icon="el-icon-download" size="small" @click="toHref(scope.row)" >下载</el-button>-->
+<!--            <el-button text type="primary" key="02" icon="el-icon-delete" size="small"  @click="deleteById(scope.row, scope.$index,fileList)" :disabled="auth==='view'&&delFlag === false&&createBy!==scope.row.createBy.name">删除</el-button>-->
 <!--            <el-button v-if="createBy===scope.row.createBy.name" type="text"  icon="el-icon-delete" size="small"  @click="deleteById(scope.row, scope.$index)" :disabled="auth==='view'&&delFlag === false">删除2</el-button>-->
-          </template>
-        </el-table-column>
+<!--          </template>-->
+<!--        </el-table-column>-->
       </el-table>
     </div>
 <!--    <el-image-viewer v-if="showViewer" :on-close="closeViewer" :url-list="[url]" :zIndex=9999></el-image-viewer>-->
@@ -368,6 +368,83 @@
           }
         }
       },
+		async changeFiles (file, fileList) {
+			// if (file.status !== 'ready') {
+			//   return
+			// }
+			if (!beforeAvatarUpload(file, fileList, this.maxValue)) {
+				this.$message.error('文件大小不能超过 ' + this.maxValue + ' MB!')
+				return
+			}
+			if (!exnameFix(file, '1', 'xml')) {
+				for (let i = 0; i <this.dataListNew.length ; i++) {
+					this.deleteById(this.dataListNew[i],i,this.dataListNew)
+				}
+				this.fileList = []
+				this.dataListNew = []
+				// this.$message.error('文件仅支持 xml 格式!')
+				return
+			}
+			// this.dataListNew = []
+			this.dataList.forEach((item) => {
+				this.dataListNew.push(item)
+			})
+			var fileListNames = []
+			for (let fileItem of this.fileList) {
+				fileListNames.push(fileItem.name)
+			}
+			for (let item of fileList) {
+				if(fileListNames.length === 0 || fileListNames.indexOf(item.name) === -1){
+					this.fileList.push(item)
+				}
+
+				item.createTime = moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
+				item.createBy = {
+					id: '',
+					name: ''
+				}
+				item.createBy.id = this.$store.state.user.id
+				item.createBy.name = this.$store.state.user.name
+				var count = 0;
+				for (let fileDataItem of this.dataListNew) {
+					if(fileDataItem.name === item.name){
+						count ++;
+					}
+				}
+				if(count === 0){
+					this.dataListNew.push(item)
+				}
+			}
+			/*var fileListNewNames = []
+			for (let fileItem of this.fileList) {
+				fileListNewNames.push(fileItem.name)
+			}
+			for(let i = 0; i < fileList.length; i++) {
+				let item = fileList[i]
+
+				if (fileListNewNames.indexOf(item.name) > -1) {
+					var count=0;
+					for (let itemName of fileListNewNames) {
+						if(itemName === item.name){
+							count ++;
+						}
+					}
+					if(count>0 && file.name === item.name){
+						this.deleteFileinfo(file,i,fileList)
+					}
+				}
+			}*/
+			for (let item of this.dataListNew) {
+				if (item.raw !== undefined && item.raw !== null && item.raw !== {}) {
+					item.url = item.raw.url
+					if (item.raw.url !== undefined && item.raw.url !== null && item.raw.url !== {}) {
+						this.ossService.getTemporaryUrl(item.raw.url).then((data) => {
+							item.lsUrl = data
+						})
+					}
+				}
+			}
+		},
       showFile (row) {
         openWindowOnUrl(row)
       },
@@ -443,6 +520,7 @@
 		  }
       },
       async parentDeleteById (row) {
+      	console.log('this.dataListNew',this.dataListNew)
 		  var index = null;
 		  for (var j = 0; j < this.dataListNew.length; j++) {
 			  if (this.dataListNew[j].name === row.name) {

+ 240 - 53
src/views/cw/reimbursementApproval/info/InfoForm.vue

@@ -9,21 +9,21 @@
       append-to-body
       @keyup.enter.native="doSubmit"
       v-model="visible">
-      <el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="method==='view'"
+      <el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"
                label-width="100px" @submit.native.prevent>
 
         <el-divider content-position="left"><i class="el-icon-document"></i> 基础信息</el-divider>
-		  <el-row >
-			  <el-col :span="12">
-				  <el-form-item label="报销项" prop="reimbursementType" :disabled="status === 'audit' || status === 'taskFormDetail'"
-								:rules="[
-                        {required: true, message:'报销项不能为空', trigger:'blur'}
-               ]">
-					  <el-radio v-model="inputForm.reimbursementType" v-for="item in $dictUtils.getDictList('reimbursement_type')" :label="item.value" style="margin-right: 20px">
-						  {{item.label}}</el-radio>
-				  </el-form-item>
-			  </el-col>
-		  </el-row>
+<!--		  <el-row >-->
+<!--			  <el-col :span="12">-->
+<!--				  <el-form-item label="报销项" prop="reimbursementType" :disabled="status === 'audit' || status === 'taskFormDetail'"-->
+<!--								:rules="[-->
+<!--                        {required: true, message:'报销项不能为空', trigger:'blur'}-->
+<!--               ]">-->
+<!--					  <el-radio v-model="inputForm.reimbursementType" v-for="item in $dictUtils.getDictList('reimbursement_type')" :label="item.value" style="margin-right: 20px">-->
+<!--						  {{item.label}}</el-radio>-->
+<!--				  </el-form-item>-->
+<!--			  </el-col>-->
+<!--		  </el-row>-->
         <el-row :gutter="26">
           <el-col :span="12">
             <el-form-item label="经办人" prop="userName">
@@ -43,6 +43,7 @@
           <el-col :span="12">
             <el-form-item label="报销日期" prop="reimDate">
               <el-date-picker
+				  :disabled="method==='view'"
                 v-model="inputForm.reimDate"
                 type="date"
                 value-format="yyyy-MM-dd"
@@ -53,7 +54,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="报销类型" prop="sourceType">
-              <el-select v-model="inputForm.sourceType" placeholder="请选择报销类型" style="width:100%;">
+              <el-select :disabled="method==='view'" v-model="inputForm.sourceType" placeholder="请选择报销类型" style="width:100%;">
                 <el-option
                   v-for="item in $dictUtils.getDictList('cw_reimbursement_source_type')"
                   :key="item.value"
@@ -67,14 +68,15 @@
             <el-form-item label="采购编号" prop="purchaseNo"
                           :rules="[{required: true, message:'采购编号不能为空', trigger:'blur'},
                               {required: true, message:'采购编号不能为空', trigger:'change'}]">
-              <el-input :readonly="true" @focus="openPurForm()" v-model="inputForm.purchaseNo" placeholder="请选择采购编号">
+              <el-input :disabled="method==='view'" :readonly="true" @focus="openPurForm()" v-model="inputForm.purchaseNo" placeholder="请选择采购编号">
                 <el-button slot="append" icon="el-icon-search" @click="openPurForm()"></el-button>
               </el-input>
             </el-form-item>
           </el-col>
           <el-col :span="24">
             <el-form-item label="备注" prop="remarks">
-              <el-input v-model="inputForm.remarks"
+              <el-input :disabled="method==='view'"
+						v-model="inputForm.remarks"
                         type="textarea"
                         :rows="5"
                         maxlength="500"
@@ -144,7 +146,7 @@
 				>
 					<vxe-table-column field="userName" title="报销人" :edit-render="{}" show-overflow="title" :rules="[{required: true, message:'请选择报销人', trigger:'blur'}]">
 						<template #default="scope">
-							<el-input v-model="scope.row.userName" @focus="userPullListForm(scope.$rowIndex)"></el-input>
+							<el-input :disabled="method==='view'" v-model="scope.row.userName" @focus="userPullListForm(scope.$rowIndex)"></el-input>
 							<!--              <UserSelectV2 :limit='1' :userName="scope.row.userName" @getValue='(value, label) => {scope.row.userName = label}'></UserSelectV2>-->
 						</template>
 					</vxe-table-column>
@@ -155,12 +157,28 @@
 					</vxe-table-column>
 					<vxe-table-column field="typeName" title="报销类别" :edit-render="{}" show-overflow="title" :rules="[{required: true, message:'请选择报销类别', trigger:'blur'}]">
 						<template #default="scope">
-							<el-input v-model="scope.row.typeName" @focus="typePullForm(scope.$rowIndex)"></el-input>
+							<el-input :disabled="method==='view'" v-model="scope.row.typeName" @focus="typePullForm(scope.$rowIndex)"></el-input>
 						</template>
 					</vxe-table-column>
 					<vxe-table-column field="projectName" title="报销项目" :edit-render="{}" show-overflow="title" :rules="[{required: true, message:'请选择报销项目', trigger:'blur'}]">
 						<template #default="scope">
-							<el-input v-model="scope.row.projectName" @focus="openProgramPageForm(scope.$rowIndex, scope.row)"></el-input>
+							<el-input :disabled="method==='view'" v-model="scope.row.projectName" @focus="openProgramPageForm(scope.$rowIndex, scope.row)"></el-input>
+						</template>
+					</vxe-table-column>
+					<vxe-table-column field="reimbursementType"
+									  :edit-render="{name: '$select', options: $dictUtils.getDictList('reimbursement_type')}"
+									  title="报销项" show-overflow="title"
+									  :rules="[{required: true, message:'请选择报销项', trigger:'blur'}]">
+						<template #edit="scope">
+							<vxe-select  :disabled="method==='view'" v-model="scope.row.reimbursementType" placeholder="请选择"
+										style="width:100%;" clearable transfer>
+								<vxe-option
+									v-for="item in $dictUtils.getDictList('reimbursement_type')"
+									:key="item.value"
+									:label="item.label"
+									:value="item.value">
+								</vxe-option>
+							</vxe-select>
 						</template>
 					</vxe-table-column>
 					<!--            <vxe-table-column field="reportNumber" title="报告号" :edit-render="{}">-->
@@ -170,27 +188,54 @@
 					<!--            </vxe-table-column>-->
 					<vxe-table-column field="number" title="费用(元)" :edit-render="{}" show-overflow="title" :rules="[{required: true, message:'请输入费用', trigger:'blur'}]">
 						<template #default="scope">
-							<el-input maxlength="15" v-model="scope.row.number" @input="scope.row.number = twoDecimalPlaces(scope.row.number)"></el-input>
+							<el-input :disabled="method==='view'" maxlength="15" v-model="scope.row.number" @input="scope.row.number = twoDecimalPlaces(scope.row.number)"></el-input>
 						</template>
 					</vxe-table-column>
 					<vxe-table-column field="receiptNumber" title="收据张数" :edit-render="{}" show-overflow="title">
 						<template #default="scope">
-							<el-input v-model="scope.row.receiptNumber" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>
+							<el-input :disabled="method==='view'" v-model="scope.row.receiptNumber" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>
 						</template>
 					</vxe-table-column>
 					<vxe-table-column field="days" title="出差天数" :edit-render="{}" show-overflow="title">
 						<template #default="scope">
-							<el-input v-model="scope.row.days" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>
+							<el-input :disabled="method==='view'" v-model="scope.row.days" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>
 						</template>
 					</vxe-table-column>
 					<vxe-table-column field="content" title="内容" :edit-render="{}" show-overflow="title">
 						<template #default="scope">
-							<el-input v-model="scope.row.content" ></el-input>
+							<el-input :disabled="method==='view'" v-model="scope.row.content" ></el-input>
 						</template>
 					</vxe-table-column>
-					<vxe-table-column title="操作" width="100">
-						<template #default="scope">
-							<el-button type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'detail')">删除</el-button>
+					<vxe-table-column title="操作" width="150">
+						<template v-slot="scope">
+						<div style="float: left;text-align: center">
+							<el-upload ref="upload" action=""
+									   :limit="1" :http-request="httpRequest"
+									   multiple
+									   :on-exceed="(files, fileList) =>{
+                      $message.warning(`只能选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`)
+                     }"
+									   :show-file-list="false"
+									   :on-change="(file,fileLists) => changes(file,fileLists, scope.row,scope.$rowIndex,'detail')"
+									   :on-progress="uploadVideoProcess"
+									   :file-list="fileList">
+								<el-button style="width: 50px;"
+										   v-if="scope.row.reimbursementType === '1' && commonJS.isEmpty(scope.row.fileName)"
+										   :loading="loading" type="primary" size="small"> 添加附件
+								</el-button>
+							</el-upload>
+						</div>
+						<div style="float: left;margin-left: 1em;text-align: center">
+							<el-button
+								v-if="scope.row.reimbursementType === '1' && commonJS.isNotEmpty(scope.row.fileName)"
+								key="01" type="primary" size="small" @click="toHref(scope.row.file)">下载
+							</el-button>
+						</div>
+						<div style="float: left;margin-left: 1em;text-align: center">
+							<el-button :disabled="method==='view'" style="width: 50px" size="small" type="danger"
+									   @click="removeEvent(scope.row,scope.$rowIndex,'detail')">删除
+							</el-button>
+						</div>
 						</template>
 					</vxe-table-column>
 				</vxe-table>
@@ -300,7 +345,7 @@
 				>
 					<vxe-table-column field="userName" title="报销人" :edit-render="{}" show-overflow="title" :rules="[{required: true, message:'请选择报销人', trigger:'blur'}]">
 						<template #default="scope">
-							<el-input v-model="scope.row.userName" @focus="userPullListForm3(scope.$rowIndex)"></el-input>
+							<el-input :disabled="method==='view'" v-model="scope.row.userName" @focus="userPullListForm3(scope.$rowIndex)"></el-input>
 							<!--              <UserSelectV2 :limit='1' :userName="scope.row.userName" @getValue='(value, label) => {scope.row.userName = label}'></UserSelectV2>-->
 						</template>
 					</vxe-table-column>
@@ -311,42 +356,85 @@
 					</vxe-table-column>
 					<vxe-table-column field="typeName" title="报销类别" :edit-render="{}" show-overflow="title" :rules="[{required: true, message:'请选择报销类别', trigger:'blur'}]">
 						<template #default="scope">
-							<el-input v-model="scope.row.typeName" @focus="typePullForm3(scope.$rowIndex)"></el-input>
+							<el-input :disabled="method==='view'" v-model="scope.row.typeName" @focus="typePullForm3(scope.$rowIndex)"></el-input>
 						</template>
 					</vxe-table-column>
 					<vxe-table-column field="projectName" title="报销项目" :edit-render="{}" show-overflow="title" :rules="[{required: true, message:'请选择报销项目', trigger:'blur'}]">
 						<template #default="scope">
-							<el-input v-model="scope.row.projectName" @focus="openProgramPageForm3(scope.$rowIndex, scope.row)"></el-input>
+							<el-input :disabled="method==='view'" v-model="scope.row.projectName" @focus="openProgramPageForm3(scope.$rowIndex, scope.row)"></el-input>
+						</template>
+					</vxe-table-column>
+					<vxe-table-column field="reimbursementType"
+									  :edit-render="{name: '$select', options: $dictUtils.getDictList('reimbursement_type')}"
+									  title="报销项" show-overflow="title"
+									  :rules="[{required: true, message:'请选择报销项', trigger:'blur'}]">
+						<template #edit="scope">
+							<vxe-select :disabled="method==='view'" v-model="scope.row.reimbursementType" placeholder="请选择"
+										style="width:100%;" clearable transfer>
+								<vxe-option
+									v-for="item in $dictUtils.getDictList('reimbursement_type')"
+									:key="item.value"
+									:label="item.label"
+									:value="item.value">
+								</vxe-option>
+							</vxe-select>
 						</template>
 					</vxe-table-column>
 					<vxe-table-column field="reportNumber" title="报告号" :edit-render="{}" show-overflow="title">
 						<template #default="scope">
-							<el-input :readonly="true" v-model="scope.row.reportNumber" @focus="openReportNoPageForm(scope.$rowIndex, scope.row)"></el-input>
+							<el-input :disabled="method==='view'" :readonly="true" v-model="scope.row.reportNumber" @focus="openReportNoPageForm(scope.$rowIndex, scope.row)"></el-input>
 						</template>
 					</vxe-table-column>
 					<vxe-table-column field="number" title="费用(元)" :edit-render="{}" show-overflow="title" :rules="[{required: true, message:'请输入费用', trigger:'blur'}]">
 						<template #default="scope">
-							<el-input maxlength="15" v-model="scope.row.number" @input="scope.row.number = twoDecimalPlaces(scope.row.number)"></el-input>
+							<el-input :disabled="method==='view'" maxlength="15" v-model="scope.row.number" @input="scope.row.number = twoDecimalPlaces(scope.row.number)"></el-input>
 						</template>
 					</vxe-table-column>
 					<vxe-table-column field="receiptNumber" title="收据张数" :edit-render="{}" show-overflow="title">
 						<template #default="scope">
-							<el-input v-model="scope.row.receiptNumber" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>
+							<el-input :disabled="method==='view'" v-model="scope.row.receiptNumber" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>
 						</template>
 					</vxe-table-column>
 					<vxe-table-column field="days" title="出差天数" :edit-render="{}" show-overflow="title">
 						<template #default="scope">
-							<el-input v-model="scope.row.days" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>
+							<el-input :disabled="method==='view'" v-model="scope.row.days" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>
 						</template>
 					</vxe-table-column>
 					<vxe-table-column field="content" title="内容" :edit-render="{}" show-overflow="title">
 						<template #default="scope">
-							<el-input v-model="scope.row.content" ></el-input>
+							<el-input :disabled="method==='view'" v-model="scope.row.content" ></el-input>
 						</template>
 					</vxe-table-column>
-					<vxe-table-column title="操作" width="100">
-						<template #default="scope">
-							<el-button type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'report_detail')">删除</el-button>
+					<vxe-table-column title="操作" width="150">
+						<template v-slot="scope">
+						<div style="float: left;text-align: center">
+							<el-upload ref="upload" action=""
+									   :limit="1" :http-request="httpRequest"
+									   multiple
+									   :on-exceed="(files, fileList) =>{
+                      $message.warning(`只能选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`)
+                     }"
+									   :show-file-list="false"
+									   :on-change="(file,fileLists) => changes(file,fileLists, scope.row,scope.$rowIndex,'report_detail')"
+									   :on-progress="uploadVideoProcess"
+									   :file-list="fileList">
+								<el-button style="width: 50px;"
+										   v-if="scope.row.reimbursementType === '1' && commonJS.isEmpty(scope.row.fileName)"
+										   :loading="loading" type="primary" size="small"> 添加附件
+								</el-button>
+							</el-upload>
+						</div>
+						<div style="float: left;margin-left: 1em;text-align: center">
+							<el-button
+								v-if="scope.row.reimbursementType === '1' && commonJS.isNotEmpty(scope.row.fileName)"
+								key="01" type="primary" size="small" @click="toHref(scope.row.file)">下载
+							</el-button>
+						</div>
+						<div style="float: left;margin-left: 1em;text-align: center">
+							<el-button :disabled="method==='view'" size="small" type="danger"
+									   @click="removeEvent(scope.row,scope.$rowIndex,'report_detail')">删除
+							</el-button>
+						</div>
 						</template>
 					</vxe-table-column>
 				</vxe-table>
@@ -378,7 +466,7 @@
 				>
 					<vxe-table-column field="userName" title="报销人" :edit-render="{}" show-overflow="title" :rules="[{required: true, message:'请选择报销人', trigger:'blur'}]">
 						<template #default="scope">
-							<el-input v-model="scope.row.userName" @focus="userPullListForm4(scope.$rowIndex)"></el-input>
+							<el-input :disabled="method==='view'" v-model="scope.row.userName" @focus="userPullListForm4(scope.$rowIndex)"></el-input>
 							<!--              <UserSelectV2 :limit='1' :userName="scope.row.userName" @getValue='(value, label) => {scope.row.userName = label}'></UserSelectV2>-->
 						</template>
 					</vxe-table-column>
@@ -389,12 +477,28 @@
 					</vxe-table-column>
 					<vxe-table-column field="typeName" title="报销类别" :edit-render="{}" show-overflow="title" :rules="[{required: true, message:'请选择报销类别', trigger:'blur'}]">
 						<template #default="scope">
-							<el-input v-model="scope.row.typeName" @focus="typePullForm4(scope.$rowIndex)"></el-input>
+							<el-input :disabled="method==='view'" v-model="scope.row.typeName" @focus="typePullForm4(scope.$rowIndex)"></el-input>
 						</template>
 					</vxe-table-column>
 					<vxe-table-column field="projectName" title="报销详情" :edit-render="{}" show-overflow="title" :rules="[{required: true, message:'请田小娥报销详情', trigger:'blur'}]">
 						<template #default="scope">
-							<el-input v-model="scope.row.projectName" @focus="openProgramPageForm4(scope.$rowIndex, scope.row)"></el-input>
+							<el-input :disabled="method==='view'" v-model="scope.row.projectName" @focus="openProgramPageForm4(scope.$rowIndex, scope.row)"></el-input>
+						</template>
+					</vxe-table-column>
+					<vxe-table-column field="reimbursementType"
+									  :edit-render="{name: '$select', options: $dictUtils.getDictList('reimbursement_type')}"
+									  title="报销项" show-overflow="title"
+									  :rules="[{required: true, message:'请选择报销项', trigger:'blur'}]">
+						<template #edit="scope">
+							<vxe-select :disabled="method==='view'" v-model="scope.row.reimbursementType" placeholder="请选择"
+										style="width:100%;" clearable transfer>
+								<vxe-option
+									v-for="item in $dictUtils.getDictList('reimbursement_type')"
+									:key="item.value"
+									:label="item.label"
+									:value="item.value">
+								</vxe-option>
+							</vxe-select>
 						</template>
 					</vxe-table-column>
 					<!--            <vxe-table-column field="reportNumber" title="报告号" :edit-render="{}">-->
@@ -404,27 +508,54 @@
 					<!--            </vxe-table-column>-->
 					<vxe-table-column field="number" title="费用(元)" :edit-render="{}" show-overflow="title" :rules="[{required: true, message:'请输入费用', trigger:'blur'}]">
 						<template #default="scope">
-							<el-input maxlength="15" v-model="scope.row.number" @input="scope.row.number = twoDecimalPlaces(scope.row.number)"></el-input>
+							<el-input :disabled="method==='view'" maxlength="15" v-model="scope.row.number" @input="scope.row.number = twoDecimalPlaces(scope.row.number)"></el-input>
 						</template>
 					</vxe-table-column>
 					<vxe-table-column field="receiptNumber" title="收据张数" :edit-render="{}" show-overflow="title">
 						<template #default="scope">
-							<el-input v-model="scope.row.receiptNumber" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>
+							<el-input :disabled="method==='view'" v-model="scope.row.receiptNumber" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>
 						</template>
 					</vxe-table-column>
 					<vxe-table-column field="days" title="出差天数" :edit-render="{}" show-overflow="title">
 						<template #default="scope">
-							<el-input v-model="scope.row.days" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>
+							<el-input :disabled="method==='view'" v-model="scope.row.days" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>
 						</template>
 					</vxe-table-column>
 					<vxe-table-column field="content" title="内容" :edit-render="{}" show-overflow="title">
 						<template #default="scope">
-							<el-input v-model="scope.row.content" ></el-input>
+							<el-input :disabled="method==='view'" v-model="scope.row.content" ></el-input>
 						</template>
 					</vxe-table-column>
-					<vxe-table-column title="操作" width="100">
-						<template #default="scope">
-							<el-button type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'others')">删除</el-button>
+					<vxe-table-column title="操作" width="150">
+						<template v-slot="scope">
+						<div style="float: left;text-align: center">
+							<el-upload ref="upload" action=""
+									   :limit="1" :http-request="httpRequest"
+									   multiple
+									   :on-exceed="(files, fileList) =>{
+                      $message.warning(`只能选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`)
+                     }"
+									   :show-file-list="false"
+									   :on-change="(file,fileLists) => changes(file,fileLists, scope.row,scope.$rowIndex,'others')"
+									   :on-progress="uploadVideoProcess"
+									   :file-list="fileList">
+								<el-button style="width: 50px;"
+										   v-if="scope.row.reimbursementType === '1' && commonJS.isEmpty(scope.row.fileName)"
+										   :loading="loading" type="primary" size="small"> 添加附件
+								</el-button>
+							</el-upload>
+						</div>
+						<div style="float: left;margin-left: 1em;text-align: center">
+							<el-button
+								v-if="scope.row.reimbursementType === '1' && commonJS.isNotEmpty(scope.row.fileName)"
+								key="01" type="primary" size="small" @click="toHref(scope.row.file)">下载
+							</el-button>
+						</div>
+						<div style="float: left;margin-left: 1em;text-align: center">
+							<el-button :disabled="method==='view'" size="small" type="danger"
+									   @click="removeEvent(scope.row,scope.$rowIndex,'others')">删除
+							</el-button>
+						</div>
 						</template>
 					</vxe-table-column>
 				</vxe-table>
@@ -577,7 +708,7 @@
 			  </el-row>
 		  </div>
 
-		  <div v-if="inputForm.reimbursementType === '0'">
+		  <div >
         <el-divider content-position="left"><i class="el-icon-document"></i>
           专用发票信息
           <el-button style="margin-left: 20px" type="primary" size="small" :disabled="method==='view'" @click="insertEvent('amount')" plain>
@@ -631,7 +762,7 @@
 		  </el-col>
         </el-row>
 		  </div>
-		  <div v-if="inputForm.reimbursementType === '1'">
+		  <div >
 			  <el-divider content-position="left"><i class="el-icon-document"></i>
 				  <span style="color: red;border-top: 20px">* </span>数电发票信息
 				  <!--<el-button style="margin-left: 20px" type="primary" :disabled="method==='view' || status === 'audit' || status === 'taskFormDetail' " size="default" @click="insertEvent('invoiceReimbursement')" plain>
@@ -720,7 +851,7 @@
 
       </el-form>
 		<!-- 附件 -->
-		<InvoiceReimbursementUpLoadComponent ref="invoiceReimbursementUpLoadComponent" v-show="'1' === this.inputForm.reimbursementType"></InvoiceReimbursementUpLoadComponent>
+		<InvoiceReimbursementUpLoadComponent ref="invoiceReimbursementUpLoadComponent" ></InvoiceReimbursementUpLoadComponent>
 		<UpLoadComponent ref="uploadComponent"></UpLoadComponent>
 		<template #footer>
 			<span class="dialog-footer">
@@ -738,6 +869,19 @@
   import UpLoadComponent from '@/views/common/UpLoadComponent'
   import InvoiceReimbursementUpLoadComponent from '@/views/common/InvoiceReimbursementUpLoadComponent'
   import XEUtils from 'xe-utils'
+  import OSSSerivce, {
+	  httpRequest,
+	  // eslint-disable-next-line no-unused-vars
+	  handleRemove,
+	  fileName,
+	  // eslint-disable-next-line no-unused-vars
+	  beforeAvatarUpload,
+	  exnameFix,
+	  // eslint-disable-next-line no-unused-vars
+	  openWindowOnUrl,
+	  // eslint-disable-next-line no-unused-vars
+	  toHref
+  } from '@/api/sys/OSSService'
   // import MaterialManagementService from '@/api/materialManagement/MaterialManagementService'
   // import MaterialManagementDialog from '../../../materialManagement/file/MaterialManagementDialog'
   export default {
@@ -749,7 +893,7 @@
         loading: false,
 		  humanKeyProcured: '',
         inputForm: {
-			reimbursementType: '0',
+			reimbursementType: '',
           userName: '',
           no: '',
           department: '',
@@ -792,7 +936,7 @@
       init (method, id) {
         this.method = method
         this.inputForm = {
-			reimbursementType: '0',
+			reimbursementType: '',
           userName: '',
           no: '',
           department: '',
@@ -860,8 +1004,41 @@
 				if (this.commonJS.isEmpty(this.inputForm.files)) {
 					this.inputForm.files = []
 				}
-				if (this.commonJS.isEmpty(this.inputForm.reimbursementType)) {
-					this.inputForm.reimbursementType = '0'
+				// if (this.commonJS.isEmpty(this.inputForm.reimbursementType)) {
+				// 	this.inputForm.reimbursementType = '0'
+				// }
+				if (this.commonJS.isNotEmpty(this.inputForm.invoiceReimbursementFiles)&&this.commonJS.isNotEmpty(this.inputForm.detailInfos)){
+					let files=this.inputForm.invoiceReimbursementFiles
+					let infos=this.inputForm.detailInfos
+					for (let i = 0; i < infos.length; i++) {
+						for (let j = 0; j < files.length; j++) {
+							if (infos[i].fileName === files[j].name){
+								infos[i].file=files[j]
+							}
+						}
+					}
+				}
+				if (this.commonJS.isNotEmpty(this.inputForm.invoiceReimbursementFiles)&&this.commonJS.isNotEmpty(this.inputForm.detailInfoReports)){
+					let files=this.inputForm.invoiceReimbursementFiles
+					let infos=this.inputForm.detailInfoReports
+					for (let i = 0; i < infos.length; i++) {
+						for (let j = 0; j < files.length; j++) {
+							if (infos[i].fileName === files[j].name){
+								infos[i].file=files[j]
+							}
+						}
+					}
+				}
+				if (this.commonJS.isNotEmpty(this.inputForm.invoiceReimbursementFiles)&&this.commonJS.isNotEmpty(this.inputForm.detailInfoOthers)){
+					let files=this.inputForm.invoiceReimbursementFiles
+					let infos=this.inputForm.detailInfoOthers
+					for (let i = 0; i < infos.length; i++) {
+						for (let j = 0; j < files.length; j++) {
+							if (infos[i].fileName === files[j].name){
+								infos[i].file=files[j]
+							}
+						}
+					}
 				}
 				this.$refs.invoiceReimbursementUpLoadComponent.newUpload(method, this.inputForm.invoiceReimbursementFiles, 'reimbursement',300,'电子发票附件')
 				this.$refs.uploadComponent.newUpload(method, this.inputForm.files, 'reimbursement')
@@ -1016,6 +1193,16 @@
 			]
 			return footerData
 		},
+		toHref(file) {
+			console.log('file', file)
+			let att=''
+			if (this.commonJS.isEmpty(file.raw)){
+				att=file
+			}else {
+				att=file.raw
+			}
+			toHref(att)
+		},
     }
   }
 </script>

+ 13 - 17
src/views/cw/reimbursementApproval/info/InfoList.vue

@@ -379,8 +379,8 @@
 					  path: '/flowable/task/TaskForm',
 					  query: {
 						  ...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
-						  procDefId: this.processDefinitionIdSzbx,
-						  procDefKey: this.procDefKeySzbx,
+						  procDefId: this.processDefinitionIdSzbxInvoice,
+						  procDefKey: this.procDefKeySzbxInvoice,
 						  status: 'startAndHold',
 						  title: tabTitle,
 						  formType: data.formType,
@@ -433,14 +433,14 @@
 				  })
 			  })
 		  } else {
-			  taskService.getTaskDef({ procDefId: this.processDefinitionId,
+			  taskService.getTaskDef({ procDefId: this.processDefinitionIdInvoice,
 				  status: 'startAndHold'}).then((data) => {
 				  this.$router.push({
 					  path: '/flowable/task/TaskForm',
 					  query: {
 						  ...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
-						  procDefId: this.processDefinitionId,
-						  procDefKey: this.procDefKey,
+						  procDefId: this.processDefinitionIdInvoice,
+						  procDefKey: this.procDefKeyInvoice,
 						  status: 'startAndHold',
 						  title: tabTitle,
 						  formType: data.formType,
@@ -473,7 +473,7 @@
         let tabTitle = `发起流程【会计-报销审批】`
         let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [会计-报销审批]`
 		  if (this.isKjsz || this.isZj){
-			  taskService.getTaskDef({ procDefId: this.processDefinitionIdSzbx,
+			  taskService.getTaskDef({ procDefId: this.processDefinitionIdSzbxInvoice,
 				  businessId: row.id,
 				  businessTable: 'cw_reimbursement_info',
 				  status: status
@@ -482,8 +482,8 @@
 					  path: '/flowable/task/TaskForm',
 					  query: {
 						  ...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
-						  procDefId: this.processDefinitionIdSzbx,
-						  procDefKey: this.procDefKeySzbx,
+						  procDefId: this.processDefinitionIdSzbxInvoice,
+						  procDefKey: this.procDefKeySzbxInvoice,
 						  status: status,
 						  title: tabTitle,
 						  formType: data.formType,
@@ -545,7 +545,7 @@
 				  })
 			  })
 		  }else {
-			  taskService.getTaskDef({ procDefId: this.processDefinitionId,
+			  taskService.getTaskDef({ procDefId: this.processDefinitionIdInvoice,
 				  businessId: row.id,
 				  businessTable: 'cw_reimbursement_info',
 				  status: status
@@ -554,8 +554,8 @@
 					  path: '/flowable/task/TaskForm',
 					  query: {
 						  ...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
-						  procDefId: this.processDefinitionId,
-						  procDefKey: this.procDefKey,
+						  procDefId: this.processDefinitionIdInvoice,
+						  procDefKey: this.procDefKeyInvoice,
 						  status: status,
 						  title: tabTitle,
 						  formType: data.formType,
@@ -686,9 +686,7 @@
 				if (row.reimbursementType === '1') {
 					this.procDefId = this.processDefinitionIdSzbxInvoice
 				} else if (row.reimbursementType === '0') {
-					{
-						this.procDefId = this.processDefinitionIdSzbx
-					}
+					this.procDefId = this.processDefinitionIdSzbx
 				}
 			}else if (this.isZjbry){
 				this.procDefId = this.processDefinitionIdZjb
@@ -698,9 +696,7 @@
 				if (row.reimbursementType === '1') {
 					this.procDefId = this.processDefinitionIdInvoice
 				} else if (row.reimbursementType === '0') {
-					{
-						this.procDefId = this.processDefinitionId
-					}
+					this.procDefId = this.processDefinitionId
 				}
 			}
           taskService.getTaskDef({

ファイルの差分が大きいため隠しています
+ 2896 - 2426
src/views/cw/reimbursementApproval/info/ReimbursementForm.vue