package.json | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/project/travelexpenseslist.rar | 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/project/travelexpenseslist/Modifydetails/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/project/travelexpenseslist/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
package.json
@@ -62,6 +62,7 @@ "vue-count-to": "1.0.13", "vue-cropper": "0.5.5", "vue-meta": "^2.4.0", "vue-pdf": "^4.3.0", "vue-router": "3.4.9", "vue-year-picker": "^1.1.0", "vuedraggable": "2.24.3", src/views/project/travelexpenseslist.rarBinary files differ
src/views/project/travelexpenseslist/Modifydetails/index.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,2358 @@ <template> <div class="Modifydetailscla"> <div class="boxdiv"> <div class="top-text">{{ title }}</div> <el-form ref="form" :model="form" :rules="rules" label-width="120px"> <el-row ><el-col :span="5"> <el-form-item label="ç³è¯·æ¥æ" prop="createTime"> <el-date-picker style="width: 100%" v-model="form.createTime" type="date" value-format="yyyy-MM-dd HH:mm:ss" placeholder="ç³è¯·æ¥æ" > </el-date-picker> </el-form-item> </el-col> <el-col :span="5"> <el-form-item label="ç»å人" prop="username"> <el-select v-model="form.username" clearable filterable allow-create ref="getReportname" default-first-option placeholder="è¯·éæ©" > <el-option v-for="item in personsList" :key="item.reportNo" :label="item.reportName" :value="item.reportName" > </el-option> </el-select> </el-form-item> </el-col> <el-col :span="5"> <el-form-item label="æå±ç»å«" prop="deptmentname"> <el-input v-model="form.deptmentname" placeholder="æå±ç»å«" /> <!--<treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="è¯·éæ©å½å±é¨é¨" />--> </el-form-item> </el-col> <el-col :span="5"> <el-form-item label="ç»é¿" prop="managername"> <el-input v-model="form.managername" placeholder="ç»é¿" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="15"> <el-form-item label="åºå·®äºç±" prop="reason"> <el-input v-model="form.reason" placeholder="åºå·®äºç±" /> </el-form-item> </el-col> <el-col :span="5"> <el-form-item label="æç®è " prop="infoid"> <el-select v-model="form.infoid" @change="selectbaseinfo" filterable placeholder="è¯·éæ©æç®è " > <el-option v-for="item in baselist" :key="item.index" :label="item.name" :value="item.infoid" > </el-option> </el-select> </el-form-item> </el-col> </el-row> <el-row style="margin-top: 10px"> <el-col :span="5"> <el-form-item label="æ¥ééé¢" prop="amountrequested"> <el-input :disabled="true" v-model="form.amountrequested" placeholder="æ¥éå计éé¢" /> </el-form-item> </el-col> <el-col :span="10"> <el-form-item label="大åéé¢" prop="bigstrmoney"> <el-input :disabled="true" v-model="form.bigstrmoney" placeholder="æ¥é大åéé¢" /> </el-form-item> </el-col ><el-col :span="5"> <el-form-item label="å®¡æ ¸ç¶æ" prop="flowlevel"> <el-select v-model="form.recordstatus" placeholder="è¯·éæ©å®¡æ ¸ç¶æ" clearable :disabled="true" size="small" > <el-option v-for="dict in dict.type.sys_recordstatus" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> </el-col> </el-row> <!-- <el-row> <el-col :span="15"> <el-form-item label="åºå·®äºç±" prop="reason"> <el-input v-model="form.reason" placeholder="åºå·®äºç±" /> </el-form-item> </el-col> <el-col :span="5"> <el-form-item label="æ¥éåç±»" prop="costtype"> <el-select v-model="form.costtype" value-key="value" placeholder="è¯·éæ©åºå·®äººåç±»" @change="getTravelers"> <el-option v-for="dict in dict.type.sys_travelexpensebelong" :key="dict.value" :label="dict.label" :value="dict.value"></el-option> </el-select> </el-form-item> </el-col> <el-col :span="5"> <el-form-item label="åºå·®äºº" prop="travelers"> <el-select v-model="form.travelers" clearable filterable allow-create ref="getReportname" default-first-option placeholder="è¯·éæ©" @change="getAccountinfo()"> <el-option v-for="item in travelers" :key="item.reportNo" :label="item.reportName" :value="item.reportName"> </el-option> </el-select> </el-form-item> </el-col> <el-col :span="5"> <el-form-item label="æ¶æ¬¾é¶è¡" prop="depositbank"> <el-input v-model="form.depositbank" placeholder="弿·é¶è¡" /> </el-form-item> </el-col> <el-col :span="5"> <el-form-item label="é¶è¡è´¦å·" prop="bankcardno"> <el-input v-model="form.bankcardno" placeholder="弿·é¶è¡" /> </el-form-item> </el-col> <el-col :span="5"> <el-form-item label="èç³»çµè¯" prop="phone"> <el-input v-model="form.phone" placeholder="èç³»çµè¯" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="20"><el-divider></el-divider></el-col> </el-row> <el-row> <el-col :span="5"> <el-form-item label="å®¶å±è´¹ç¨" prop="donoramount"> <el-input :disabled="true" v-model="form.donoramount" placeholder="å®¶å±è´¹ç¨" @blur=" (val) => { sumTotalFee(); } " onchange="if(/[^0-9.]/.test(this.value)){alert('请æ£ç¡®è¾å ¥æ´æ°æ°åæå°æ°ï¼');this.value='';}" /> </el-form-item> </el-col> <el-col :span="15"> <el-form-item label="è´¹ç¨è¯´æ" prop="donorremark"> <el-input :disabled="true" v-model="form.donorremark" placeholder="å®¶å±è´¹ç¨è¯´æ" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="5"> <el-form-item label="å®¶å±äººæ°" prop="donorrelatives"> <el-input v-model="form.donorrelatives" placeholder="å®¶å±äººæ°" /> </el-form-item> </el-col> <el-col :span="5"> <el-form-item label="æ¶æ¬¾äºº" prop="donorpayee"> <el-input v-model="form.donorpayee" placeholder="äº²å±æ¶æ¬¾äºº" /> </el-form-item> </el-col> <el-col :span="5"> <el-form-item label="æ¶æ¬¾é¶è¡" prop="donorbank"> <el-input v-model="form.donorbank" placeholder="å®¶å±é¶è¡" /> </el-form-item> </el-col> <el-col :span="5"> <el-form-item label="é¶è¡å¡å·" prop="donorbankcard"> <el-input v-model="form.donorbankcard" placeholder="é¶è¡å¡å·" /> </el-form-item> </el-col> </el-row> --> <!-- <el-row type="flex" :gutter="10" align="right" class="mb8"> <el-col :span="6"> <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="addDetailRow" >æ°å¢ä¸è¡</el-button > </el-col> </el-row> --> <el-row style="margin-top: 25px; margin-bottom: 5px"> <el-col :span="20">æ¥éæç»å½å ¥ï¼</el-col> </el-row> <el-row> <el-table :data="rbDetails" border highlight-current-row show-summary> <el-table-column prop="orderno" slot="" label="åºå·" align="center" fixed width="65" > <template slot-scope="scope"> <el-input v-model="scope.row.orderno" placeholder="åºå·" /> </template> </el-table-column> <!--主é®ãå¤ä¸å±ç¤º--> <el-table-column prop="id" slot="" label="主é®" align="center" fixed width="95" v-if="false" > <template slot-scope="scope"> <el-input v-model="scope.row.id" placeholder="id" /> </template> </el-table-column> <el-table-column prop="rbid" slot="" label="å¤é®" align="center" fixed width="95" v-if="false" > <template slot-scope="scope"> <el-input v-model="scope.row.rbid" placeholder="rbid" /> </template> </el-table-column> <el-table-column prop="persontype" slot="" label="人åç±»å«" align="center" fixed width="130" > <template slot-scope="scope"> <el-select v-model="scope.row.persontype" value-key="value" placeholder="人åç±»å«" @change="getPersons(scope.row)" > <el-option v-for="dict in dict.type.sys_travelexpensebelong" :key="dict.value" :label="dict.label" :value="dict.label" ></el-option> </el-select> </template> </el-table-column> <el-table-column prop="personname" slot="" label="è´¹ç¨äººå" align="center" fixed width="110" > <template slot-scope="scope"> <el-select v-model="scope.row.personname" clearable filterable allow-create default-first-option placeholder="è¯·éæ©" @focus1="getPersons(scope.row)" > <el-option v-for="item in personsSel" :key="item.reportNo" :label="item.reportName" :value="item.reportName" > </el-option> </el-select> </template> </el-table-column> <el-table-column prop="starttime" slot="" label="å¼å§æ¥æ" fixed align="center" width="150" > <template slot-scope="scope"> <el-date-picker :picker-options="{ disabledDate: time => { if (scope.row.endtime) { return ( time.getTime() > new Date(scope.row.endtime.replace(/-/g, '/')) ); } } }" clearable size="small" style="width: 100%" v-model="scope.row.starttime" type="date" value-format="yyyy-MM-dd HH:mm:ss" placeholder="å¼å§æ¥æ" @blur="getdays(scope.row)" > </el-date-picker> </template> </el-table-column> <el-table-column prop="endtime" slot="" label="ç»ææ¥æ" align="center" fixed width="150" > <template slot-scope="scope"> <el-date-picker :picker-options="{ disabledDate: time => { if (scope.row.starttime) { return ( time.getTime() < new Date(scope.row.starttime.replace(/-/g, '/')) ); } } }" clearable size="small" style="width: 100%" v-model="scope.row.endtime" type="date" value-format="yyyy-MM-dd HH:mm:ss" placeholder="ç»ææ¥æ" @blur="getdays(scope.row)" > </el-date-picker> </template> </el-table-column> <el-table-column prop="departure" slot="" label="åºåå°" align="center" width="100" > <template slot-scope="scope"> <el-input v-model="scope.row.departure" placeholder="åºåå°" /> </template> </el-table-column> <el-table-column label="å°è¾¾å°" prop="destination" align="center" width="140" > <template slot-scope="scope"> <!-- <el-input v-model="scope.row.destination" placeholder="å°è¾¾å°" @blur="getallowance(scope.row)" /> --> <el-select filterable allow-create v-model="scope.row.destination" value-key="value" placeholder="å°è¾¾å°" @change="getallowance(scope.row)" > <el-option v-for="dict in dict.type.sys_area_name" :key="dict.value" :label="dict.label" :value="dict.label" ></el-option> </el-select> </template> </el-table-column> <el-table-column prop="days" label="天æ°" width="65" align="center"> <template slot-scope="scope"> <el-input v-model="scope.row.days" @blur="getallowance(scope.row)" placeholder="天æ°" /> </template> </el-table-column> <el-table-column prop="traffictype" label="åºå交éå·¥å ·" align="center" width="100" > <template slot-scope="scope"> <el-select v-model="scope.row.traffictype" placeholder="åºå交éå·¥å ·" > <el-option v-for="dict in dict.type.sys_traffictype" :key="dict.value" :label="dict.label" :value="dict.label" ></el-option> </el-select> </template> </el-table-column> <el-table-column prop="traffictype2" label="è¿å交éå·¥å ·" align="center" width="100" > <template slot-scope="scope"> <el-select v-model="scope.row.traffictype2" placeholder="è¿å交éå·¥å ·" > <el-option v-for="dict in dict.type.sys_traffictype" :key="dict.value" :label="dict.label" :value="dict.label" ></el-option> </el-select> </template> </el-table-column> <el-table-column prop="trafficexpense" label="交éè´¹" align="center" width="80" > <template slot-scope="scope"> <el-input v-model="scope.row.trafficexpense" placeholder="交éè´¹" @blur=" val => { sumRowFee(scope.row); } " /> </template> </el-table-column> <!-- <el-table-column prop="cityfee" label="å¸å 交éè´¹" align="center" width="100"> <template slot-scope="scope"> <el-input v-model="scope.row.cityfee" placeholder="å¸å 交éè´¹" @blur=" (val) => { sumRowFee(scope.row); } ">{{ Number(scope.row.cityfee).toFixed(2) }} </el-input> </template> </el-table-column> --> <el-table-column prop="hotelexpense" label="ä½å®¿è´¹" align="center" width="80" > <template slot-scope="scope"> <el-input v-model="scope.row.hotelexpense" placeholder="ä½å®¿è´¹" @blur=" val => { sumRowFee(scope.row); } " /> </template> </el-table-column> <el-table-column prop="foodexpenses" label="é¤è´¹æ¥é" align="center" width="80" > <template slot-scope="scope"> <el-input v-model="scope.row.foodexpenses" placeholder="ä¼é£è´¹æ¥é" @blur=" val => { sumRowFee(scope.row); } " /> </template> </el-table-column> <el-table-column prop="foodallowance" label="ä¼é£è¡¥å©" align="center" width="80" > <template slot-scope="scope"> <el-input v-model="scope.row.foodallowance" placeholder="ä¼é£è´¹è¡¥å©" @blur=" val => { sumRowFee(scope.row); } " /> </template> </el-table-column> <el-table-column prop="otherexpense" label="å ¬æè´¹è¡¥å©" align="center" width="80" > <template slot-scope="scope"> <el-input v-model="scope.row.otherexpense" placeholder="æè´¹" @blur=" val => { sumRowFee(scope.row); } " /> </template> </el-table-column> <el-table-column prop="otherfeeamount" label="å ¶ä»è´¹ç¨" align="center" width="90" > <template slot-scope="scope"> <el-input v-model="scope.row.otherfeeamount" placeholder="å ¶ä»è´¹ç¨" @blur=" val => { sumRowFee(scope.row); } " /> </template> </el-table-column> <el-table-column prop="departure" slot="" label="å ¶ä»è´¹ç¨è¯´æ" align="center" width="120" > <template slot-scope="scope"> <el-input v-model="scope.row.otherfeedesc" placeholder="å ¶ä»è´¹ç¨è¯´æ" /> </template> </el-table-column> <el-table-column prop="total" label="å计" align="center" width="110" fixed="right" > <template slot-scope="scope"> <el-input v-model="scope.row.total" placeholder="å计" /> </template> </el-table-column> <el-table-column fixed="right" label="æä½" align="center" width="120" v-if="dialogType == 'edit'" > <template slot-scope="scope"> <el-button type="text" size="mini" @click="addDetailRow(scope.$index)" >æ°å¢</el-button > <el-button @click.native.prevent=" deleteDetailRow(scope.$index, rbDetails, scope.row) " type="text" size="small" > å é¤ </el-button> <el-button @click.native.prevent=" Filepopup(scope.$index, rbDetails, scope.row) " type="text" size="small" > æä»¶ </el-button> </template> </el-table-column> </el-table> </el-row> <el-row style="margin-top: 25px; margin-bottom: 5px"> <el-col :span="20">æ¥é请款æç»ï¼</el-col> </el-row> <el-row style="margin-top: 30px"> <el-table :data="rbPayees" border highlight-current-row show-summary> <el-table-column prop="orderno" slot="" label="åºå·" align="center" fixed width="65" > <template slot-scope="scope"> <el-input v-model="scope.row.orderno" placeholder="åºå·" /> </template> </el-table-column> <!--主é®ãå¤é®ä¸å±ç¤º--> <el-table-column prop="id" slot="" label="主é®" align="center" fixed width="95" v-if="false" > <template slot-scope="scope"> <el-input v-model="scope.row.id" placeholder="id" /> </template> </el-table-column> <el-table-column prop="rbid" slot="" label="å¤é®" align="center" fixed width="95" v-if="false" > <template slot-scope="scope"> <el-input v-model="scope.row.rbid" placeholder="rbid" /> </template> </el-table-column> <el-table-column prop="persontype" slot="" label="人åç±»å«" align="center" fixed width="130" > <template slot-scope="scope"> <el-select v-model="scope.row.persontype" value-key="value" placeholder="人åç±»å«" @change="getPersons(scope.row)" > <el-option v-for="dict in dict.type.sys_travelexpensebelong" :key="dict.value" :label="dict.label" :value="dict.label" ></el-option> </el-select> </template> </el-table-column> <el-table-column prop="personname" slot="" label="æ¶æ¬¾äºº" align="center" fixed width="110" > <template slot-scope="scope"> <el-select v-model="scope.row.personname" clearable filterable allow-create ref="getReportname" default-first-option placeholder="è¯·éæ©" @change="getAccountinfo2(scope.row, scope.row.persontype)" > <el-option v-for="item in personsSel" :key="item.reportNo" :label="item.reportName" :value="item.reportName" > </el-option> </el-select> </template> </el-table-column> <el-table-column prop="bankname" slot="" label="é¶è¡åç§°" align="center" fixed width="200" > <template slot-scope="scope"> <el-input v-model="scope.row.bankname" placeholder="é¶è¡åç§°" /> </template> </el-table-column> <el-table-column prop="bankcardno" slot="" label="é¶è¡å¡å·" align="center" fixed width="200" > <template slot-scope="scope"> <el-input v-model="scope.row.bankcardno" placeholder="é¶è¡å¡å·" /> </template> </el-table-column> <el-table-column prop="amount" slot="" label="ææ¬¾éé¢" align="center" fixed width="130" > <template slot-scope="scope"> <el-input v-model="scope.row.amount" placeholder="ææ¬¾éé¢" /> </template> </el-table-column> <el-table-column prop="remark" slot="" label="请款说æ" align="center" fixed width="280" > <template slot-scope="scope"> <el-input v-model="scope.row.remark" placeholder="说æ" /> </template> </el-table-column ><el-table-column prop="paiddate" slot="" label="ææ¬¾æ¥æ" fixed align="center" width="150" > <template slot-scope="scope"> <el-date-picker clearable size="small" style="width: 100%" v-model="scope.row.paiddate" type="date" value-format="yyyy-MM-dd HH:mm:ss" placeholder="ææ¬¾æ¥æ" :disabled="true" > </el-date-picker> </template> </el-table-column> <el-table-column label="æä½" align="center" width="100" v-if="dialogType == 'edit'" > <template slot-scope="scope"> <el-button type="text" size="mini" @click="addPayeeRow(scope.$index)" >æ°å¢</el-button > <el-button @click.native.prevent=" deletePayeeRow(scope.$index, rbPayees, scope.row) " type="text" size="small" > å é¤ </el-button> </template> </el-table-column> </el-table> </el-row> <el-row v-if="dialogType == 'detail'"> <el-table :data="fundflowList" border> <el-table-column label="å®¡æ ¸äºº" align="center" width="120" prop="checkusername" /> <el-table-column label="å®¡æ ¸æ¥æ" align="center" width="160" prop="createTime" /> <el-table-column label="å®¡æ ¸ç»æ" align="center" width="200" prop="flowconclusion" ><template slot-scope="scope" ><span v-if="scope.row.flowconclusion == 1">éè¿</span ><span v-if="scope.row.flowconclusion == 2" >ä¸éè¿</span ></template > </el-table-column> <el-table-column label="å®¡æ ¸å¤æ³¨" align="center" prop="flowcontent" /> </el-table> </el-row> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="submitForm" v-if="dialogType == 'edit'" >ä¿ å</el-button > <el-button @click="cancel">å æ¶</el-button> </div> </div> <el-dialog :title="pdftitle" :visible.sync="pdfVisible" width="50%"> <div class="pdfimg"> <div class="box-pdf"> <div> <el-upload size="mini" class="upload-demo" :action="uploadFileUrl" :file-list="fileListto" multiple :limit="20" :headers="headers" :on-success=" (response, file, fileList) => uploadSccess(response, file, fileList) " :on-preview="downFile" :disabled="dialogType == 'detail'" :on-error="handleUploadError" :on-exceed="handleExceed" :on-remove="remove" accept="image/*,.pdf" > <el-button :disabled="dialogType == 'detail'" size="small" type="primary" >ä¸ä¼ </el-button > </el-upload> </div> <!-- <div class="pdftit" @click="pdffn(item)" v-for="item in fileList" :key="item.name" > {{ item.name }} </div> --> </div> <div v-if="this.previewpdf" class="pdfimgmin"> <img :src="pdfimg" /> </div> <div v-else class="pdfimgmins">{{ hintitle }}</div> </div> </el-dialog> <!-- <div class="container"> <pdf :src="iframeurl"></pdf> </div> --> <!-- <embed :src="iframeurl" type="application/pdf" width="1000" height="800" /> --> </div> </template> <script> import pdf from "vue-pdf"; import Treeselect from "@riophae/vue-treeselect"; import "@riophae/vue-treeselect/dist/vue-treeselect.css"; import { listDonatebaseinfo } from "@/api/project/donatebaseinfo"; import { listReimbursementpayee, addReimbursementpayee, updateReimbursementpayee } from "@/api/project/reimbursementpayee"; import { listReimbursement, getReimbursement, delReimbursement, addReimbursement, updateReimbursement, exportReimbursement, getdownload, fundSubmit } from "@/api/project/reimbursement"; import { addReimbursementdetail, updateReimbursementdetail, listReimbursementdetailid, getReimbursementdetaillist, delReimbursementdetail, addOrupdateReimbursementdetaillist, getTravelStandard } from "@/api/project/reimbursementdetail"; import { listFundflow } from "@/api/project/fundflow"; import { getInfoBytheUserNo } from "@/api/project/externalperson"; import { regionDataPlus, CodeToText } from "element-china-area-data"; import Li_area_select from "@/components/Address"; import { getUser, getUserProfile } from "@/api/system/user"; import { treeselect } from "@/api/system/dept"; import { getSubsidy } from "@/api/project/travelcity"; import { listReportname, listUser } from "@/api/project/organization"; import { getToken } from "@/utils/auth"; export default { components: { Treeselect, Li_area_select, }, name: "Funddetail", dicts: [ "sys_finsubject", "sys_0_1", "sys_fund_type", "sys_financeitemtype", "sys_recordstatus", "sys_travelexpensebelong", "sys_traffictype", "sys_area_name" ], data() { return { //OPOåè°å personsXty: [], //OPOä¸è人å personsZzry: [], //OPO管ç人å personsManager: [], //OPOä¸å®¶ personsExpert: [], //å ¨é¨äººå personsList: [], //䏿å¯ä»¥éæ©äººåå表 personsSel: [], // é¨é¨æ é项 deptOptions: undefined, pdftitle: "", pdfimg: "", pdfVisible: false, costtypeobj: { value: 0, label: "" }, hintitle: "éä¸å·¦ä¾§å·²ä¸ä¼ æä»¶é¢è§æ¥ç", atpresent: "", iframeurl: "", options: regionDataPlus, selectedOptions: [], searchAddress: { sheng: "", shi: "", qu: "" }, value1: "", previewpdf: false, // é®ç½©å± loading: true, // 导åºé®ç½©å± exportLoading: false, // é䏿°ç» ids: [], // éå个ç¦ç¨ single: true, // éå¤ä¸ªç¦ç¨ multiple: true, // æ¾ç¤ºæç´¢æ¡ä»¶ showSearch: true, // æ»æ¡æ° total: 0, // è´¹ç¨ç³è¯·æç»è¡¨æ ¼æ°æ® funddetailList: [], // å¼¹åºå±æ é¢ title: "", // æ¯å¦æ¾ç¤ºå¼¹åºå± open: false, queryParams2: { persontype: null, arriveAddr: null }, feesParams: { beneficiaryNo: null, starttime: null, endtime: null }, //æ¥è¯¢ä»æ¬¾ queryParamsPayee: { rbid: null }, // 表ååæ° form: {}, reimbursementList: [], // è¡¨åæ ¡éª rules: { createTime: [ { required: true, message: "请è¾å ¥å¡«æ¥æ¥æ", trigger: "blur" } ], reason: [ { required: true, message: "请è¾å ¥åºå·®äºç±", trigger: "blur" } ], deptmentname: [ { required: true, message: "请è¾å ¥æå±ä¸å¡ç»", trigger: "blur" } ] }, //è´¹ç¨ç³è¯·åform applicationForm: { applicationType: null, donorno: null, donorname: null, bigstrmoney: null }, rbDetails: [], rbPayees: [], arrr2: [], baselist: [], donatorList: [], standardlevel: 0, defaultperson: {}, fundflowList: [], showApproveRecordDialog: false, dialogType: "edit", //ä¸ä¼ å票æä»¶è·¯å¾ uploadFileUrl: process.env.VUE_APP_BASE_API + "/common/upload", //æä»¶å表 fileList: [], fileListto: [], //人åç±»å« persontype: null, //å°è¾¾å° arriveAddr: null, headers: { Authorization: "Bearer " + getToken() } }; }, created() { //è·åè®°å½å表 this.getList(); this.gainee(); //è·åæ¥éä¸ç人åä¿¡æ¯ this.getPersonList(); }, mounted() { //è·åæç®è å§å listDonatebaseinfo().then(res => { let list = res.rows; let baseinfolist = []; this.donatorList = list; list.forEach(element => { baseinfolist.push({ infoid: element.id, name: element.name }); }); if (baseinfolist != 0) { this.baselist = baseinfolist; } }); //è·åç»å½è ä¿¡æ¯ this.getUsermsg(); //è·åé¨é¨ä¿¡æ¯ //this.getTreeselect(); }, methods: { handleUploadError() {}, remove(file, fileList) { const rbDetails = [...this.rbDetails]; this.fileListto.splice(this.fileListto.indexOf(file), 1); console.log(file); console.log(this.fileListto); rbDetails[this.atpresent].annexfilesList = this.fileListto; }, handleExceed() { this.$message.error(`ä¸ä¼ æä»¶æ°éä¸è½è¶ è¿ ${5} 个!`); }, //æä»¶ä¸ä¼ æååè° uploadSccess(response, file, fileList) { console.log(response); console.log(file); console.log(fileList); this.rbDetails; //è·åéä»¶ä¿¡æ¯ä½ç½® if (response.code == 200) { this.form.filename = file.raw.name; console.log(this.fileList); this.$modal.msgSuccess(response.msg); this.fileListto.push({ name: file.name, url: response.url }); console.log(this.fileListto); this.rbDetails[this.atpresent].annexfilesList = this.fileListto; } else { this.$modal.msgError(response.msg); } }, // ç¹å»æä»¶ Filepopup(index, rows, row) { console.log(index, rows, row); this.atpresent = index; console.log(this.atpresent); this.pdfVisible = true; if (this.rbDetails[index].annexfilesList) { this.fileListto = this.rbDetails[index].annexfilesList; } else { this.fileListto = []; this.pdfimg = ""; this.pdftitle = ""; } }, // ç¹å»å·²ä¸ä¼ æä»¶ downFile(item) { console.log(item); this.pdftitle = item.name; let name = item.name.split("."); if (name[1] == "pdf") { this.$modal.msgWarning("å½åæä»¶æä¸æ¯æé¢è§"); this.previewpdf = false; this.hintitle = "å½åæä»¶æä¸æ¯æé¢è§"; } else if (name[1] == "jpg" || "png") { this.previewpdf = true; if (item.url) { this.pdfimg = item.url; } else { this.pdfimg = item.response.url; } } else { this.hintitle = "å½åæä»¶æä¸æ¯æé¢è§"; this.$modal.msgWarning("å½åæä»¶æä¸æ¯æé¢è§"); this.previewpdf = false; } }, //è·åç»å½ç¨æ·ä¿¡æ¯ getUsermsg() { getUserProfile().then(response => { this.defaultperson = response.data; this.standardlevel = response.data.standardlevel; }); }, /** æ¥è¯¢é¨é¨ä¸ææ ç»æ */ getTreeselect() { treeselect().then(response => { this.deptOptions = response.data; }); }, //è·å人åå表 getPersonList() { //è·åOPOåè°ååå listReportname("xty1").then(res => { this.personsXty = res.data; this.personsList = this.personsXty; //OPOä¸è人ååå listReportname("zzry").then(res => { this.personsZzry = res.data; this.personsList = this.personsList.concat(this.personsZzry); //OPO管ç人ååå listReportname("fzr").then(res => { this.personsManager = res.data; this.personsList = this.personsList.concat(this.personsManager); //OPOä¸å®¶åå listReportname("expert").then(res => { this.personsExpert = res.data; this.personsList = this.personsList.concat(this.personsExpert); }); }); }); }); }, //è·åä¸ä¸ªç±»å«ç人åå表 getPersons(row) { //ä¸è人å-1,åè°å-2,ä¸å®¶-3,å®¶å±-4,å ¶ä»äººå-5 let tmpList = null; if (row.persontype == "ä¸è人å") { this.personsSel = this.personsZzry; } else if (row.persontype == "åè°å") { this.personsSel = this.personsXty; } else if (row.persontype == "ä¸å®¶") { this.personsSel = this.personsExpert; } else if (row.persontype == "å®¶å±") { this.personsSel = tmpList; } else if (row.persontype == "管ç人å") { this.personsSel = this.personsManager; } }, //è·å设置人åè´¦å·ä¿¡æ¯ getAccountinfo() { this.coltravelers.map(res => { if (res.reportName == this.form.travelers) { getInfoBytheUserNo(res.reportNo).then(res => { this.form.depositbank = res.data.depositbank; this.form.bankcardno = res.data.bankcardno; this.form.phone = res.data.telephone; }); } }); }, //è·å设置人åè´¦å·ä¿¡æ¯ getAccountinfo2(row, personType) { let dataArr = []; if (personType == "ä¸è人å") { dataArr = this.personsZzry; } else if (personType == "åè°å") { dataArr = this.personsXty; } else if (personType == "ä¸å®¶") { dataArr = this.personsExpert; } else if (personType == "管ç人å") { dataArr = this.personsManager; } for (let m = 0; m < dataArr.length; m++) { if (dataArr[m].reportName == row.personname) { row.bankname = dataArr[m].depositbank; row.bankcardno = dataArr[m].bankcardno; } } }, //è®¡ç®æ¥æ getdays(row) { if ( row.starttime != "" && row.starttime != null && row.endtime != "" && row.endtime != null ) { //计ç®å¤©æ° row.days = ( Math.floor( Math.abs(Date.parse(row.starttime) - Date.parse(row.endtime)) / (1000 * 3600 * 24) ) + 1 ).toString(); } else { row.days = 0; } //计ç®è¡¥å© this.getallowance(row); }, //计ç®è¡¥å© getallowance(row) { console.log("ro", row); //å ¬æè´¹è¡¥å©ï¼æå·æ¡åºï¼å»ºå¾·ï¼æ·³å®60ï¼æå·å ¶ä»å°åº0ï¼éæå·å°åº80 if (row.destination != "") { var tempStr = row.destination; //éªè¯åå¸ if (tempStr == "æå·") { row.otherexpense = ""; } else if ( tempStr == "æå·-æ¡åº" || tempStr == "æå·-建德" || tempStr == "æå·-æ·³å®" ) { row.otherexpense = (parseInt(row.days) * 60).toString(); } else { row.otherexpense = (parseInt(row.days) * 80).toString(); } } //ä¼é£è´¹è¡¥å©ï¼åå¸ï¼è¥¿èï¼æ°çï¼éæµ·.120ï¼ï¼å ¶ä»100ï¼ row.foodallowance = (parseInt(row.days) * 100).toString(); //计ç®å计 this.sumRowFee(row); }, getStandard(row) { if ( row.searchAddress.sheng != "" && row.searchAddress.shi != "" && row.searchAddress.qu != "" && row.starttime != "" && row.starttime != null && row.days != "" ) { //计ç®ä½å®¿è´¹ let info = { pabegindate: this.$moment(row.starttime).format("YYYY-MM-DD"), pacitycode: this.$refs["residenceSelect_" + row.index].getShi(), paenddate: this.$moment(row.starttime) .add(row.days, "day") .format("YYYY-MM-DD"), paprovincecode: this.$refs["residenceSelect_" + row.index].getSheng(), patowncode: this.$refs["residenceSelect_" + row.index].getQu(), standardlevel: this.standardlevel }; getTravelStandard(info) .then(response => { let fee = 0; for (let i = 0; i < response.data.length; i++) { fee += response.data[i].reimbursementamout; } row.hotelexpense = fee; }) .finally(() => { this.sumTotalFee(); }); } }, selcetdestination(row) { console.log("ç®çå°éæ©äºä»¶", row, row.searchAddress); //row.searchAddress = this.searchAddress; if ( row.searchAddress.sheng != "" && row.searchAddress.shi != "" && row.searchAddress.qu != "" ) { row.destination = row.searchAddress.sheng + row.searchAddress.shi + row.searchAddress.qu; row.travelprovincename = row.searchAddress.sheng; row.travelprovince = this.$refs[ "residenceSelect_" + row.index ].getSheng(); row.travelcityname = row.searchAddress.shi; row.travelcity = this.$refs["residenceSelect_" + row.index].getShi(); row.traveltownname = row.searchAddress.qu; row.traveltown = this.$refs["residenceSelect_" + row.index].getQu(); this.getStandard(row); } }, getCodeToText(codeArray) { // åæ° codeStr, // if (null === codeStr && null === codeArray) { // return null; // } else if (null === codeArray) { // codeArray = codeStr.split(","); // } let area = ""; switch (codeArray.length) { case 1: area += CodeToText[codeArray[0]]; break; case 2: area += CodeToText[codeArray[0]] + "/" + CodeToText[codeArray[1]]; break; case 3: area += CodeToText[codeArray[0]] + "/" + CodeToText[codeArray[1]] + "/" + CodeToText[codeArray[2]]; break; default: break; } return area; }, //è·åæç®è åºæ¬ä¿¡æ¯ï¼æç®ç¼å·ãæç®è å§å selectbaseinfo() { let list = this.donatorList; list.forEach(item => { if (item.id == this.form.infoid) { this.form.donorno = item.donorno; this.form.donorname = item.name; } }); }, onpick(e) { // console.log(e,this.value1) }, gettable(e) { const id = e.id; getdownload(e.id).then(res => { var fileUrl = res; //è·åå½åç½å var urlBase = process.env.VUE_APP_BASE_API; var curWWWPath = window.document.location.href; var pos = curWWWPath.indexOf(window.document.location.pathname); // å建aæ ç¾ var aEle = document.createElement("a"); aEle.href = curWWWPath.substring(0, pos) + urlBase + fileUrl["downloadUrl"]; aEle.click(); }); // downloadconfirmationinfo(id).then((response) => { // var fileUrl = response; // //è·åå½åç½å // var urlBase = process.env.VUE_APP_BASE_API; // var curWWWPath = window.document.location.href; // var pos = curWWWPath.indexOf(window.document.location.pathname); // // å建aæ ç¾ // var aEle = document.createElement("a"); // aEle.href = // curWWWPath.substring(0, pos) + urlBase + fileUrl["downloadUrl"]; // aEle.click(); // }); }, /** æ¥è¯¢æ¥éç³è¯·å表 */ getList() { this.loading = true; listReimbursement(this.queryParams).then(response => { this.reimbursementList = response.rows; this.total = response.total; this.loading = false; }); }, // åæ¶æé® cancel() { this.open = false; }, // 表åéç½® reset() { this.fileListto = []; this.form = { ceshi: {}, bigstrmoney: null, id: null, delFlag: null, createBy: null, createTime: null, updateBy: null, updateTime: null, userno: null, username: null, idcardtype: null, idcardno: null, phone: null, depositbank: null, bankcardno: null, branchbankname: null, annexbankcard: null, annexfiles: null, amountrequested: null, prepaidamount: null, invoicecount: null, attachcount: null, managerno: null, managername: null, deptmentno: null, deptmentname: null, opochecker: null, finvicepresident: null, busvicepresident: null, officedirector: null, financedirector: null, financechecher: null, infoid: null, donorno: null, bigstrmoney: null, remark: null, reason: null, recordstatus: "-1", uploadflag: null, uploadtime: null, costtype: null, costtypename: null }; this.rbDetails = []; this.rbPayees = []; this.resetForm("form"); }, // handup(e) { console.log("䏿¥", e); }, /** æç´¢æé®æä½ */ handleQuery() { // console.log('pop',this.value1) if (this.value1.length > 0) { this.queryParams.starttime = this.value1[0] + " 00:00:00"; this.queryParams.endtime = this.value1[1] + " 00:00:00"; console.log("å¼å§æ¶é´", this.queryParams.starttime); } // this.queryParams.pacitycode= this.$refs["residenceSelect"].getShi(); // this.queryParams.paprovincecode= this.$refs["residenceSelect" ].getSheng(); // this.queryParams.patowncode= this.$refs["residenceSelect" ].getQu(); this.queryParams.pageNum = 1; this.getList(); }, /** éç½®æé®æä½ */ resetQuery() { this.resetForm("queryForm"); this.handleQuery(); }, // å¤éæ¡é䏿°æ® handleSelectionChange(selection) { this.ids = selection.map(item => item.id); this.single = selection.length !== 1; this.multiple = !selection.length; }, /** æ°å¢æé®æä½ */ handleAdd() { this.reset(); this.open = true; this.title = "æ°å¢æ¥éç³è¯·"; this.dialogType = "edit"; this.fundflowList = []; this.form.userno = this.defaultperson.userName; this.form.username = this.defaultperson.nickName; this.form.deptmentname = this.defaultperson.dept.deptName; this.form.deptmentno = this.defaultperson.dept.deptId; this.form.managername = this.defaultperson.dept.leader; this.addDetailRow(0); this.addPayeeRow(0); }, gainee() { let ids = this.$route.query.id; let pos = this.$route.query.pos; console.log(ids, pos); if (pos == 2) { this.handleDetail(ids); } else if (pos == 1) { this.handleUpdate(ids); } }, /** ä¿®æ¹æé®æä½ */ handleUpdate(ids) { this.$router.push({ path: "/finance/travelexpenseslist/Modifydetails/", query: { id: ids } }); this.dialogType = "edit"; this.reset(); // this.open = true; this.title = "æ¥éç³è¯·ä¿®æ¹"; //è·åæ¥éä¸»ä¿¡æ¯ const id = ids || this.ids; getReimbursement(id).then(response => { this.form = response.data; this.fileListto = this.form.annexfiles ? this.form.annexfiles .split(",") .map(item => ({ url: item, name: item })) : []; this.form.recordstatus = response.data.recordstatus + ""; let ids = response.data.id; //è·åæ¥éæç»ä¿¡æ¯ getReimbursementdetaillist(ids).then(res => { this.rbDetails = res.data; console.log(this.rbDetails); if (this.rbDetails.length == 0) { this.addDetailRow(0); } for (let i = 0; i < this.rbDetails.length; i++) { this.sumRowFee(this.rbDetails[i]); //è§£æåºå·®å°å /* this.rbDetails[i].index = i; this.rbDetails[i].searchAddress = { sheng: this.rbDetails[i].travelprovincename, shi: this.rbDetails[i].travelcityname, qu: this.rbDetails[i].traveltownname, }; */ } //宿¶å计éé¢ //this.sumTotalFee(); }); //è·åæ¥éææ¬¾ä¿¡æ¯ this.queryParamsPayee.rbid = ids; listReimbursementpayee(this.queryParamsPayee).then(res => { this.rbPayees = res.rows; if (this.rbPayees.length == 0) { this.addPayeeRow(0); } }); }); }, /** æ¥çæé®æä½ */ handleDetail(ids) { this.dialogType = "detail"; this.title = "æ¥éç³è¯·è¯¦æ "; this.reset(); this.open = true; const id = ids || this.ids; getReimbursement(id).then(response => { this.form = response.data; //éä»¶ this.fileListto = this.form.annexfiles ? this.form.annexfiles .split(",") .map(item => ({ url: item, name: item })) : []; //å®¡æ ¸ç¶æ this.form.recordstatus = response.data.recordstatus + ""; let ids = response.data.id; let listFundflowparams = { fundid: ids, fundtype: 1 }; listFundflow(listFundflowparams).then(res => { this.fundflowList = res.rows; }); //æ¥éæç» getReimbursementdetaillist(ids).then(res => { this.rbDetails = res.data; /* for (let i = 0; i < this.rbDetails.length; i++) { this.rbDetails[i].index = i; this.rbDetails[i].searchAddress = { sheng: this.rbDetails[i].travelprovincename, shi: this.rbDetails[i].travelcityname, qu: this.rbDetails[i].traveltownname, }; } */ }); if (this.rbDetails.length > 0) this.sumTotalFee(); //仿¬¾ä¿¡æ¯ this.queryParamsPayee.rbid = ids; listReimbursementpayee(this.queryParamsPayee).then(res => { this.rbPayees = res.rows; if (this.rbPayees.length == 0) { this.addPayeeRow(0); } }); }); }, /** æäº¤ä¿åæé® */ submitForm() { this.$refs["form"].validate(valid => { if (valid) { /** let indexErrTime = this.rbDetails.findIndex((item) => { if (item.endtime && item.starttime) { let d = this.$moment(item.endtime).diff(this.$moment(item.starttime), "d"); if (d < 0) { return true; } else { return false; } } else { false; } }); if (indexErrTime > -1) { this.$message({ message: "第" + (indexErrTime + 1) + "è¡å°è¾¾æ¥ææ©äºåºåæ¥æ", type: "warning", }); return; } let emptyStartTimeindex = this.rbDetails.findIndex( (item) => item.starttime == null || item.starttime == undefined || item.starttime == "" ); if (emptyStartTimeindex > -1) { this.$message({ message: "第" + (emptyStartTimeindex + 1) + "è¡åºåæ¥æä¸ºç©º", type: "warning", }); return; } let emptyEndTimeindex = this.rbDetails.findIndex( (item) => item.endtime == null || item.endtime == undefined || item.endtime == "" ); if (emptyEndTimeindex > -1) { this.$message({ message: "第" + (emptyEndTimeindex + 1) + "è¡å°è¾¾æ¥æä¸ºç©º", type: "warning", }); return; } //è´¹ç¨å½å± let belongArr = this.dict.type.sys_travelexpensebelong; let costtypeindex = belongArr.findIndex( (item) => this.form.costtype == item.value ); if (costtypeindex > -1) { this.form.costtypename = belongArr[costtypeindex].label; } */ //éä»¶æä»¶å¤ç let list = this.fileListto; console.log(list); //æ ¡éªè¯·æ¬¾éé¢å计æ¯å¦çäºæ¥éåéé¢ if ( this.form.amountrequested != this.rbPayees.reduce( (amount, item) => amount + Number(item.amount), 0.0 ) ) { this.$message({ message: "æ¥é请款表ä¸å计éé¢ä¸çäºæ¥éåçæ¥ééé¢ï¼è¯·æ´æ£ååä¿åï¼", type: "warning" }); return; } const rbDetails = [...this.rbDetails]; const rbPayees = [...this.rbPayees]; console.log(rbDetails); console.log(rbPayees); if (this.form.id != null) { console.log(this.form); updateReimbursement(this.form); // .then(res => { //ä¿åæç» for (let i = 0; i < rbDetails.length; i++) { if (rbDetails[i].rbid != null) { updateReimbursementdetail(rbDetails[i]); } else { //rbidå ³è主表Id rbDetails[i].rbid = this.form.id; addReimbursementdetail(rbDetails[i]); } } //ä¿åè´¦æ· for (let i = 0; i < rbPayees.length; i++) { if (rbPayees[i].rbid != null) { updateReimbursementpayee(rbPayees[i]); } else { //rbidå ³è主表Id rbPayees[i].rbid = this.form.id; addReimbursementpayee(rbPayees[i]); } } this.$modal.msgSuccess("ä¿®æ¹æ¥éåä¿åæå!"); this.open = false; this.getList(); // }) // .catch(err => { // this.$modal.msgError("ä¿®æ¹æ¥éåä¿å失败ï¼"); // }); } else { this.form.recordstatus = -1; addReimbursement(this.form) .then(response => { //ä¿åæç» for (let i = 0; i < rbDetails.length; i++) { //rbidå ³è主表Id rbDetails[i].rbid = response.data; addReimbursementdetail(rbDetails[i]); } //ä¿åè´¦å· for (let i = 0; i < rbPayees.length; i++) { //rbidå ³è主表Id rbPayees[i].rbid = response.data; addReimbursementpayee(rbPayees[i]); } this.$modal.msgSuccess("æ°å¢æ¥éåä¿åæå!"); this.open = false; this.getList(); }) .catch(err => { this.$modal.msgError("æ°å¢æ¥éåä¿å失败ï¼"); }); } } }); }, /** å é¤æé®æä½ */ handleDelete(row) { const ids = row.id || this.ids; this.$modal .confirm("æ¯å¦ç¡®è®¤å é¤è¯¥æ¡è®°å½ï¼") .then(function() { // å é¤detailså çæ°æ® return delReimbursement(ids); }) .then(() => { delReimbursementdetail(ids); this.getList(); this.$modal.msgSuccess("å 餿å"); }) .catch(() => {}); }, /** å¯¼åºæé®æä½ */ handleExport() { const queryParams = this.queryParams; this.$modal .confirm("æ¯å¦ç¡®è®¤å¯¼åºæææ¥éç³è¯·æ°æ®é¡¹ï¼") .then(() => { this.exportLoading = true; return exportReimbursement(queryParams); }) .then(response => { this.$download.name(response.msg); this.exportLoading = false; }) .catch(() => {}); }, //æ°å¢ä¸è¡ addDetailRow(rowIndex) { let rowData = { //index: this.rbDetails.length, searchAddress: { sheng: "", shi: "", qu: "" }, id: null, rbid: null, starttime: null, departure: null, endtime: null, destination: null, days: null, trafficexpense: 0, traffictype: null, traffictype2: null, cityfee: 0, hotelexpense: 0, invoicecount: null, attachcount: null, otherexpense: 0, foodexpenses: 0, foodallowance: 0, otherfeeamount: 0, annexfiles: null, remark: null, delFlag: null, createBy: null, createTime: null, updateBy: null, updateTime: null, uploadFlag: null, uploadTime: null, total: 0, orderno: null, personname2: null, personname: null, destination: null }; if (rowIndex == undefined || rowIndex == null || rowIndex < 0) { this.rbDetails.push(rowData); } else { this.rbDetails.splice(rowIndex + 1, 0, rowData); } for (let i = 0; i < this.rbDetails.length; i++) { this.rbDetails[i].orderno = i + 1; } }, addPayeeRow(rowIndex) { let rowData = { id: null, personType: null, personname: null, bankname: null, bankcardno: null, paiddate: null, remark: null, orderno: null, personname: null, amount: null }; if (rowIndex == undefined || rowIndex == null || rowIndex <= 0) { this.rbPayees.push(rowData); } else { this.rbPayees.splice(rowIndex + 1, 0, rowData); } for (let i = 0; i < this.rbPayees.length; i++) { this.rbPayees[i].orderno = i + 1; } }, deleteDetailRow(index, rows, row) { this.$confirm("æ¯å¦ç¡®è®¤å é¤?", "æç¤º", { confirmButtonText: "ç¡®å®", cancelButtonText: "åæ¶", type: "success" }) .then(() => { console.log(row); if (row.id !== null) { delReimbursementdetail(row.id).then(res => { this.$modal.msgSuccess("å 餿å"); rows.splice(index, 1); this.recountOrderNo(); this.sumTotalFee(); }); } else { rows.splice(index, 1); this.sumTotalFee(); this.$modal.msgSuccess("å 餿å"); this.recountOrderNo(); } }) .catch(() => { //å ç¹åæ¶çæç¤º }); }, deletePayeeRow(index, rows, row) { this.$confirm("æ¯å¦ç¡®è®¤å é¤?", "æç¤º", { confirmButtonText: "ç¡®å®", cancelButtonText: "åæ¶", type: "success" }) .then(() => { console.log(row); if (row.id !== null) { delReimbursementdetail(row.id).then(res => { this.$modal.msgSuccess("å 餿å"); rows.splice(index, 1); this.recountOrderNo2(); this.sumTotalFee(); }); } else { rows.splice(index, 1); this.sumTotalFee(); this.$modal.msgSuccess("å 餿å"); this.recountOrderNo2(); } }) .catch(() => { //å ç¹åæ¶çæç¤º }); }, //éæ°è®¡ç®æåº recountOrderNo() { for (let i = 0; i < this.rbDetails.length; i++) { this.rbDetails[i].orderno = i + 1; } }, //éæ°è®¡ç®æåº recountOrderNo2() { for (let i = 0; i < this.rbPayees.length; i++) { this.rbPayees[i].orderno = i + 1; } }, //䏿¥ handleup(row) { this.$confirm("æ¯å¦ç¡®è®¤å°ç»è®°è®°å½ä¸æ¥ï¼", "æç¤º", { confirmButtonText: "ç¡®å®", cancelButtonText: "åæ¶", type: "warning" }) .then(() => { //è°ç¨å·®æ è´¹ä¸æ¥æ¥å£ let tempParam = { fundid: row.id }; fundSubmit(tempParam).then(response => { if (response.code == 200) { this.getList(); this.$message({ type: "success", message: "䏿¥æå" }); } else { this.$message({ type: "error", message: "䏿¥å¤±è´¥" }); } this.loading = false; }); }) .catch(() => { this.$message({ type: "info", message: "已忶ç³è¯·" }); }); }, //计ç®ä¸è¡å计 //计ç®å½åè¡æ¥éå 容费ç¨å计 sumRowFee(row) { let totalFee = 0; if (!isNaN(parseFloat(row.trafficexpense))) { totalFee += parseFloat(row.trafficexpense); } if (!isNaN(parseFloat(row.cityfee))) { totalFee += parseFloat(row.cityfee); } if (!isNaN(parseFloat(row.hotelexpense))) { totalFee += parseFloat(row.hotelexpense); } if (!isNaN(parseFloat(row.otherexpense))) { totalFee += parseFloat(row.otherexpense); } if (!isNaN(parseFloat(row.foodexpenses))) { totalFee += parseFloat(row.foodexpenses); } if (!isNaN(parseFloat(row.foodallowance))) { totalFee += parseFloat(row.foodallowance); } if (!isNaN(parseFloat(row.otherfeeamount))) { totalFee += parseFloat(row.otherfeeamount); } row.total = totalFee; /* if (!isNaN(parseFloat(this.rbDetails[rowIndex].trafficexpense))) { totalFee += parseFloat(this.rbDetails[rowIndex].trafficexpense); } if (!isNaN(parseFloat(this.rbDetails[rowIndex].cityfee))) { totalFee += parseFloat(this.rbDetails[rowIndex].cityfee); } if (!isNaN(parseFloat(this.rbDetails[rowIndex].hotelexpense))) { totalFee += parseFloat(this.rbDetails[rowIndex].hotelexpense); } if (!isNaN(parseFloat(this.rbDetails[rowIndex].otherexpense))) { totalFee += parseFloat(this.rbDetails[rowIndex].otherexpense); } if (!isNaN(parseFloat(this.rbDetails[rowIndex].foodexpenses))) { totalFee += parseFloat(this.rbDetails[rowIndex].foodexpenses); } if (!isNaN(parseFloat(this.rbDetails[rowIndex].foodallowance))) { totalFee += parseFloat(this.rbDetails[rowIndex].foodallowance); } if (!isNaN(parseFloat(this.rbDetails[rowIndex].otherfeeamount))) { totalFee += parseFloat(this.rbDetails[rowIndex].otherfeeamount); } this.rbDetails[rowIndex].total = parseFloat(totalFee).toFixed(2); this.$set(this.rbDetails, rowIndex, this.rbDetails[rowIndex]); */ //éæ°è®¡ç®æ´ä¸ªæ¥éåçå计 this.sumTotalFee(); }, //计ç®è´¹ç¨å计 sumTotalFee() { let allSum = 0; //æç®è å®¶å±è´¹ç¨ if (!isNaN(parseFloat(this.form.donoramount))) { allSum += parseFloat(this.form.donoramount); } //æ¥éæç»è´¹ç¨ try { for (let i = 0; i < this.rbDetails.length; i++) { /* let totalFee = 0; //计ç®å½åæ¥éå 容费ç¨å计 if (!isNaN(parseFloat(this.rbDetails[i].total))) { totalFee += parseFloat(this.rbDetails[i].total); } if (!isNaN(parseFloat(this.rbDetails[i].cityfee))) { totalFee += parseFloat(this.rbDetails[i].cityfee); } if (!isNaN(parseFloat(this.rbDetails[i].hotelexpense))) { totalFee += parseFloat(this.rbDetails[i].hotelexpense); } if (!isNaN(parseFloat(this.rbDetails[i].otherexpense))) { totalFee += parseFloat(this.rbDetails[i].otherexpense); } if (!isNaN(parseFloat(this.rbDetails[i].foodexpenses))) { totalFee += parseFloat(this.rbDetails[i].foodexpenses); } if (!isNaN(parseFloat(this.rbDetails[i].foodallowance))) { totalFee += parseFloat(this.rbDetails[i].foodallowance); } if (!isNaN(parseFloat(this.rbDetails[i].otherfeeamount))) { totalFee += parseFloat(this.rbDetails[i].otherfeeamount); } this.rbDetails[i].total = parseFloat(totalFee).toFixed(2); this.$set(this.rbDetails, i, this.rbDetails[i]); */ if (!isNaN(parseFloat(this.rbDetails[i].total))) { allSum += parseFloat(this.rbDetails[i].total); } } this.form.amountrequested = allSum.toFixed(2); this.form.bigstrmoney = this.convertCurrency(this.form.amountrequested); } catch {} }, //é颿°åè½¬æ¢æå¤§å convertCurrency(money) { //æ±åçæ°å var cnNums = new Array( "é¶", "壹", "è´°", "å", "è", "ä¼", "é", "æ", "æ", "ç" ); //åºæ¬åä½ var cnIntRadice = new Array("", "æ¾", "ä½°", "ä»"); //å¯¹åºæ´æ°é¨åæ©å±åä½ var cnIntUnits = new Array("", "ä¸", "亿", "å "); //对åºå°æ°é¨ååä½ var cnDecUnits = new Array("è§", "å", "毫", "å"); //æ´æ°é颿¶åé¢è·çå符 var cnInteger = "æ´"; //æ´åå®ä»¥åçåä½ var cnIntLast = "å "; //æå¤§å¤ççæ°å var maxNum = 999999999999999.9999; //é颿´æ°é¨å var integerNum; //éé¢å°æ°é¨å var decimalNum; //è¾åºç䏿éé¢å符串 var chineseStr = ""; //å离éé¢åç¨çæ°ç»ï¼é¢å®ä¹ var parts; if (money == "") { return ""; } money = parseFloat(money); if (money >= maxNum) { //è¶ åºæå¤§å¤çæ°å return ""; } if (money == 0) { chineseStr = cnNums[0] + cnIntLast + cnInteger; return chineseStr; } //转æ¢ä¸ºå符串 money = money.toString(); if (money.indexOf(".") == -1) { integerNum = money; decimalNum = ""; } else { parts = money.split("."); integerNum = parts[0]; decimalNum = parts[1].substr(0, 4); } //è·åæ´åé¨åè½¬æ¢ if (parseInt(integerNum, 10) > 0) { var zeroCount = 0; var IntLen = integerNum.length; for (var i = 0; i < IntLen; i++) { var n = integerNum.substr(i, 1); var p = IntLen - i - 1; var q = p / 4; var m = p % 4; if (n == "0") { zeroCount++; } else { if (zeroCount > 0) { chineseStr += cnNums[0]; } //å½é¶ zeroCount = 0; chineseStr += cnNums[parseInt(n)] + cnIntRadice[m]; } if (m == 0 && zeroCount < 4) { chineseStr += cnIntUnits[q]; } } chineseStr += cnIntLast; } //å°æ°é¨å if (decimalNum != "") { var decLen = decimalNum.length; for (var i = 0; i < decLen; i++) { var n = decimalNum.substr(i, 1); if (n != "0") { chineseStr += cnNums[Number(n)] + cnDecUnits[i]; } } } if (chineseStr == "") { chineseStr += cnNums[0] + cnIntLast + cnInteger; } else if (decimalNum == "") { chineseStr += cnInteger; } return chineseStr; } } }; </script> <style lang="scss" scoped> .Modifydetailscla { padding: 10px; .boxdiv { font-size: 18px; padding: 0 30px; padding-bottom: 60px; .top-text { text-align: center; font-size: 23px; font-weight: 600; margin: 20px 0; margin-bottom: 50px; } .dialog-footer { text-align: left; margin-top: 10px; } } } .upload-demo { text-align: center; } .pdfimg { display: flex; // text-align: center; width: 100%; height: 600px; .box-pdf { width: 200px; padding-top: 20px; margin-right: 30px; border: 1px solid #dcdfe6; -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04); } .pdftit { width: 200px; padding: 20px; font-size: 18px; } .pdftit:hover { background: #c0cef7; } .pdfimgmin { width: 60%; img { width: 100%; } } .pdfimgmins { font-size: 28px; width: 60%; text-align: center; } } </style> src/views/project/travelexpenseslist/index.vue
@@ -1,7 +1,12 @@ <template> <div class="app-container"> <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px" > <el-row> <!-- <el-col :span="6"> @@ -13,31 +18,68 @@ --> <el-col :span="6"> <el-form-item label="ç»å人" prop="username"> <el-input v-model="queryParams.username" placeholder="请è¾å ¥ç»å人" clearable size="small" @keyup.enter.native="handleQuery" /> <el-input v-model="queryParams.username" placeholder="请è¾å ¥ç»å人" clearable size="small" @keyup.enter.native="handleQuery" /> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="æ¥éæ¥æ" prop="createTime"> <el-date-picker format="yyyy-MM-dd" value-format="yyyy-MM-dd" v-model="value1" type="daterange" @blur="onpick" range-separator="è³" start-placeholder="æ¥éå¼å§æ¥æ" end-placeholder="æ¥éç»ææ¥æ" @keyup.enter.native="handleQuery"> <el-date-picker format="yyyy-MM-dd" value-format="yyyy-MM-dd" v-model="value1" type="daterange" @blur="onpick" range-separator="è³" start-placeholder="æ¥éå¼å§æ¥æ" end-placeholder="æ¥éç»ææ¥æ" @keyup.enter.native="handleQuery" > </el-date-picker> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="å®¡æ ¸ç¶æ" prop="recordstatus"> <el-input v-model="queryParams.recordstatus" placeholder="è¯·éæ©å®¡æ ¸ç¶æ" clearable size="small" v-if="0" @keyup.enter.native="handleQuery" /> <el-select v-model="queryParams.recordstatus" placeholder="è¯·éæ©å®¡æ ¸ç¶æ" clearable size="small"> <el-option v-for="dict in dict.type.sys_recordstatus" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-input v-model="queryParams.recordstatus" placeholder="è¯·éæ©å®¡æ ¸ç¶æ" clearable size="small" v-if="0" @keyup.enter.native="handleQuery" /> <el-select v-model="queryParams.recordstatus" placeholder="è¯·éæ©å®¡æ ¸ç¶æ" clearable size="small" > <el-option v-for="dict in dict.type.sys_recordstatus" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> </el-col> <el-col :span="4"> <el-form-item> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">æç´¢</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">éç½®</el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery" >æç´¢</el-button > <el-button icon="el-icon-refresh" size="mini" @click="resetQuery" >éç½®</el-button > </el-form-item> </el-col> </el-row> @@ -45,42 +87,97 @@ <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">æ°å¢</el-button> <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" >æ°å¢</el-button > <!-- v-hasPermi="['project:funddetail:add']" --> </el-col> <el-col :span="1.5"> <el-button type="warning" plain icon="el-icon-download" size="mini" :loading="exportLoading" @click="handleExport">导åº</el-button> <el-button type="warning" plain icon="el-icon-download" size="mini" :loading="exportLoading" @click="handleExport" >导åº</el-button > </el-col> <!-- v-hasPermi="['project:funddetail:export']" --> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" ></right-toolbar> </el-row> <el-table border v-loading="loading" :data="reimbursementList" @selection-change="handleSelectionChange"> <el-table border v-loading="loading" :data="reimbursementList" @selection-change="handleSelectionChange" > <!-- <el-table-column type="selection" width="55" align="center" /> <el-table-column label="æ¥é人类å«" width="120" align="center" prop="costtype"> <template slot-scope="scope"> <dict-tag :options="dict.type.sys_travelexpensebelong" :value="scope.row.costtype" /> </template> </el-table-column>--> <el-table-column label="ç³è¯·æ¶é´" width="150" align="center" prop="createTime"> <el-table-column label="ç³è¯·æ¶é´" width="150" align="center" prop="createTime" > <template slot-scope="scope"> <span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }}</span> </template> </el-table-column> <el-table-column label="å®¡æ ¸ç¶æ" align="center" prop="recordstatus" width="160"> <el-table-column label="å®¡æ ¸ç¶æ" align="center" prop="recordstatus" width="160" > <template slot-scope="scope"> <dict-tag :options="dict.type.sys_recordstatus" :value="scope.row.recordstatus" /> <dict-tag :options="dict.type.sys_recordstatus" :value="scope.row.recordstatus" /> </template> </el-table-column> <el-table-column label="ç»å人" width="150" align="center" prop="username" /> <el-table-column label="ç»å人" width="150" align="center" prop="username" /> <!-- <el-table-column label="åºå·®äºº" width="180" align="center" prop="travelers"> </el-table-column>--> <el-table-column label="æ¥ééé¢" width="150" align="center" prop="amountrequested"> <el-table-column label="æ¥ééé¢" width="150" align="center" prop="amountrequested" > </el-table-column> <el-table-column label="æå±ç»å«" width="150" align="center" prop="deptmentname" /> <el-table-column label="ç»é¿" width="150" align="center" prop="managername" /> <el-table-column label="æå±ç»å«" width="150" align="center" prop="deptmentname" /> <el-table-column label="ç»é¿" width="150" align="center" prop="managername" /> <el-table-column label="åºå·®äºç±" align="center" prop="reason" /> <!-- <el-table-column label="èç³»çµè¯" width="120" align="center" prop="phone"> </el-table-column> @@ -90,44 +187,115 @@ </el-table-column> <el-table-column label="æ¥éå计" align="center" prop="financechecher"/>--> <!-- <el-table-column label="è´¢å¡å®¡æ ¸" width="120" align="center" prop="financechecher" /> --> <el-table-column label="æç®è " width="150" align="center" prop="donorname" /> <el-table-column label="æä½" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="æç®è " width="150" align="center" prop="donorname" /> <el-table-column label="æä½" align="center" fixed="right" class-name="small-padding fixed-width" width="210" > <template slot-scope="scope"> <el-button v-if="scope.row.recordstatus == -1 || scope.row.recordstatus == 1" size="mini" type="text" icon="el-icon-upload2" @click="handleup(scope.row)">䏿¥</el-button> <el-button v-if="scope.row.recordstatus == -1 || scope.row.recordstatus == 1" size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">ä¿®æ¹</el-button> <el-button size="mini" type="text" icon="el-icon-edit" @click="handleDetail(scope.row)">æ¥ç</el-button> <el-button v-if="scope.row.recordstatus == -1 || scope.row.recordstatus == 1" size="mini" type="text" icon="el-icon-upload2" @click="handleup(scope.row)" >䏿¥</el-button > <el-button v-if="scope.row.recordstatus == -1 || scope.row.recordstatus == 1" size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" >ä¿®æ¹</el-button > <el-button size="mini" type="text" icon="el-icon-edit" @click="handleDetail(scope.row)" >æ¥ç</el-button > <!-- v-hasPermi="['project:funddetail:edit']" --> <el-button size="mini" type="text" icon="el-icon-download" @click="gettable(scope.row)"> ä¸è½½ </el-button> <el-button size="mini" type="text" icon="el-icon-download" @click="gettable(scope.row)" > ä¸è½½ </el-button> <!-- v-hasPermi="['project:funddetail:edit']" --> <el-button v-if="scope.row.recordstatus == -1 || scope.row.recordstatus == 1" size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">å é¤</el-button> <el-button v-if="scope.row.recordstatus == -1 || scope.row.recordstatus == 1" size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" >å é¤</el-button > <!-- v-hasPermi="['project:funddetail:remove']" --> </template> </el-table-column> </el-table> <!-- v-hasPermi="['project:donateconsolationfund:edit']" --> <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> <!-- æ·»å æä¿®æ¹è´¹ç¨ç³è¯·æç»å¯¹è¯æ¡ --> <el-dialog :title="title" :visible.sync="open" :close-on-click-modal="false" width="1400px" append-to-body @close="reset"> <el-dialog :title="title" :visible.sync="open" :close-on-click-modal="false" width="1400px" append-to-body @close="reset" > <el-form ref="form" :model="form" :rules="rules" label-width="120px"> <el-row><el-col :span="5"> <el-row ><el-col :span="5"> <el-form-item label="ç³è¯·æ¥æ" prop="createTime"> <el-date-picker style="width: 100%" v-model="form.createTime" type="date" value-format="yyyy-MM-dd HH:mm:ss" placeholder="ç³è¯·æ¥æ"> <el-date-picker style="width: 100%" v-model="form.createTime" type="date" value-format="yyyy-MM-dd HH:mm:ss" placeholder="ç³è¯·æ¥æ" > </el-date-picker> </el-form-item> </el-col> <el-col :span="5"> </el-col> <el-col :span="5"> <el-form-item label="ç»å人" prop="username"> <el-select v-model="form.username" clearable filterable allow-create ref="getReportname" default-first-option placeholder="è¯·éæ©"> <el-option v-for="item in personsList" :key="item.reportNo" :label="item.reportName" :value="item.reportName"> <el-select v-model="form.username" clearable filterable allow-create ref="getReportname" default-first-option placeholder="è¯·éæ©" > <el-option v-for="item in personsList" :key="item.reportNo" :label="item.reportName" :value="item.reportName" > </el-option> </el-select> </el-form-item> @@ -152,8 +320,18 @@ </el-col> <el-col :span="5"> <el-form-item label="æç®è " prop="infoid"> <el-select v-model="form.infoid" @change="selectbaseinfo" filterable placeholder="è¯·éæ©æç®è "> <el-option v-for="item in baselist" :key="item.index" :label="item.name" :value="item.infoid"> <el-select v-model="form.infoid" @change="selectbaseinfo" filterable placeholder="è¯·éæ©æç®è " > <el-option v-for="item in baselist" :key="item.index" :label="item.name" :value="item.infoid" > </el-option> </el-select> </el-form-item> @@ -162,18 +340,36 @@ <el-row style="margin-top: 10px"> <el-col :span="5"> <el-form-item label="æ¥ééé¢" prop="amountrequested"> <el-input :disabled="true" v-model="form.amountrequested" placeholder="æ¥éå计éé¢" /> <el-input :disabled="true" v-model="form.amountrequested" placeholder="æ¥éå计éé¢" /> </el-form-item> </el-col> <el-col :span="10"> <el-form-item label="大åéé¢" prop="bigstrmoney"> <el-input :disabled="true" v-model="form.bigstrmoney" placeholder="æ¥é大åéé¢" /> </el-form-item> </el-col><el-col :span="5"> <el-input :disabled="true" v-model="form.bigstrmoney" placeholder="æ¥é大åéé¢" /> </el-form-item> </el-col ><el-col :span="5"> <el-form-item label="å®¡æ ¸ç¶æ" prop="flowlevel"> <el-select v-model="form.recordstatus" placeholder="è¯·éæ©å®¡æ ¸ç¶æ" clearable :disabled="true" size="small"> <el-option v-for="dict in dict.type.sys_recordstatus" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-select v-model="form.recordstatus" placeholder="è¯·éæ©å®¡æ ¸ç¶æ" clearable :disabled="true" size="small" > <el-option v-for="dict in dict.type.sys_recordstatus" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> </el-col> @@ -280,108 +476,263 @@ </el-row> <el-row> <el-table :data="rbDetails" border highlight-current-row> <el-table-column prop="orderno" slot="" label="åºå·" align="center" fixed width="65"> <el-table-column prop="orderno" slot="" label="åºå·" align="center" fixed width="65" > <template slot-scope="scope"> <el-input v-model="scope.row.orderno" placeholder="åºå·" /> </template> </el-table-column> <!--主é®ãå¤ä¸å±ç¤º--> <el-table-column prop="id" slot="" label="主é®" align="center" fixed width="95" v-if="false"> <el-table-column prop="id" slot="" label="主é®" align="center" fixed width="95" v-if="false" > <template slot-scope="scope"> <el-input v-model="scope.row.id" placeholder="id" /> </template> </el-table-column> <el-table-column prop="rbid" slot="" label="å¤é®" align="center" fixed width="95" v-if="false"> <el-table-column prop="rbid" slot="" label="å¤é®" align="center" fixed width="95" v-if="false" > <template slot-scope="scope"> <el-input v-model="scope.row.rbid" placeholder="rbid" /> </template> </el-table-column> <el-table-column prop="persontype" slot="" label="人åç±»å«" align="center" fixed width="130"> <el-table-column prop="persontype" slot="" label="人åç±»å«" align="center" fixed width="130" > <template slot-scope="scope"> <el-select v-model="scope.row.persontype" value-key="value" placeholder="人åç±»å«" @change="getPersons(scope.row)"> <el-option v-for="dict in dict.type.sys_travelexpensebelong" :key="dict.value" :label="dict.label" :value="dict.label"></el-option> <el-select v-model="scope.row.persontype" value-key="value" placeholder="人åç±»å«" @change="getPersons(scope.row)" > <el-option v-for="dict in dict.type.sys_travelexpensebelong" :key="dict.value" :label="dict.label" :value="dict.label" ></el-option> </el-select> </template> </el-table-column> <el-table-column prop="personname" slot="" label="è´¹ç¨äººå" align="center" fixed width="110"> <el-table-column prop="personname" slot="" label="è´¹ç¨äººå" align="center" fixed width="110" > <template slot-scope="scope"> <el-select v-model="scope.row.personname" clearable filterable allow-create default-first-option placeholder="è¯·éæ©" @focus1="getPersons(scope.row)"> <el-option v-for="item in personsSel" :key="item.reportNo" :label="item.reportName" :value="item.reportName"> <el-select v-model="scope.row.personname" clearable filterable allow-create default-first-option placeholder="è¯·éæ©" @focus1="getPersons(scope.row)" > <el-option v-for="item in personsSel" :key="item.reportNo" :label="item.reportName" :value="item.reportName" > </el-option> </el-select> </template> </el-table-column> <el-table-column prop="starttime" slot="" label="å¼å§æ¥æ" fixed align="center" width="150"> <el-table-column prop="starttime" slot="" label="å¼å§æ¥æ" fixed align="center" width="150" > <template slot-scope="scope"> <el-date-picker :picker-options="{ disabledDate: time => { if (scope.row.endtime) { return time.getTime() > new Date(scope.row.endtime.replace(/-/g, '/')) } } }" clearable size="small" style="width: 100%" v-model="scope.row.starttime" type="date" value-format="yyyy-MM-dd HH:mm:ss" placeholder="å¼å§æ¥æ" @blur="getdays(scope.row)"> <el-date-picker :picker-options="{ disabledDate: time => { if (scope.row.endtime) { return ( time.getTime() > new Date(scope.row.endtime.replace(/-/g, '/')) ); } } }" clearable size="small" style="width: 100%" v-model="scope.row.starttime" type="date" value-format="yyyy-MM-dd HH:mm:ss" placeholder="å¼å§æ¥æ" @blur="getdays(scope.row)" > </el-date-picker> </template> </el-table-column> <el-table-column prop="endtime" slot="" label="ç»ææ¥æ" align="center" fixed width="150"> <el-table-column prop="endtime" slot="" label="ç»ææ¥æ" align="center" fixed width="150" > <template slot-scope="scope"> <el-date-picker :picker-options="{ disabledDate: time => { if (scope.row.starttime) { return time.getTime() < new Date(scope.row.starttime.replace(/-/g, '/')) } } }" clearable size="small" style="width: 100%" v-model="scope.row.endtime" type="date" value-format="yyyy-MM-dd HH:mm:ss" placeholder="ç»ææ¥æ" @blur="getdays(scope.row)"> <el-date-picker :picker-options="{ disabledDate: time => { if (scope.row.starttime) { return ( time.getTime() < new Date(scope.row.starttime.replace(/-/g, '/')) ); } } }" clearable size="small" style="width: 100%" v-model="scope.row.endtime" type="date" value-format="yyyy-MM-dd HH:mm:ss" placeholder="ç»ææ¥æ" @blur="getdays(scope.row)" > </el-date-picker> </template> </el-table-column> <el-table-column prop="departure" slot="" label="åºåå°" align="center" width="100"> <el-table-column prop="departure" slot="" label="åºåå°" align="center" width="100" > <template slot-scope="scope"> <el-input v-model="scope.row.departure" placeholder="åºåå°" /> </template> </el-table-column> <el-table-column label="å°è¾¾å°" prop="destination" align="center" width="140"> <el-table-column label="å°è¾¾å°" prop="destination" align="center" width="140" > <template slot-scope="scope"> <!-- <el-input v-model="scope.row.destination" placeholder="å°è¾¾å°" @blur="getallowance(scope.row)" /> --> <el-select filterable allow-create v-model="scope.row.destination" value-key="value" placeholder="å°è¾¾å°" @change="getallowance(scope.row)"> <el-option v-for="dict in dict.type.sys_area_name" :key="dict.value" :label="dict.label" :value="dict.label"></el-option> <el-select filterable allow-create v-model="scope.row.destination" value-key="value" placeholder="å°è¾¾å°" @change="getallowance(scope.row)" > <el-option v-for="dict in dict.type.sys_area_name" :key="dict.value" :label="dict.label" :value="dict.label" ></el-option> </el-select> </template> </el-table-column> <el-table-column prop="days" label="天æ°" width="65" align="center"> <template slot-scope="scope"> <el-input v-model="scope.row.days" @blur="getallowance(scope.row)" placeholder="天æ°" /> <el-input v-model="scope.row.days" @blur="getallowance(scope.row)" placeholder="天æ°" /> </template> </el-table-column> <el-table-column prop="traffictype" label="åºå交éå·¥å ·" align="center" width="100"> <el-table-column prop="traffictype" label="åºå交éå·¥å ·" align="center" width="100" > <template slot-scope="scope"> <el-select v-model="scope.row.traffictype" placeholder="åºå交éå·¥å ·"> <el-option v-for="dict in dict.type.sys_traffictype" :key="dict.value" :label="dict.label" :value="dict.label"></el-option> <el-select v-model="scope.row.traffictype" placeholder="åºå交éå·¥å ·" > <el-option v-for="dict in dict.type.sys_traffictype" :key="dict.value" :label="dict.label" :value="dict.label" ></el-option> </el-select> </template> </el-table-column> <el-table-column prop="traffictype2" label="è¿å交éå·¥å ·" align="center" width="100"> <el-table-column prop="traffictype2" label="è¿å交éå·¥å ·" align="center" width="100" > <template slot-scope="scope"> <el-select v-model="scope.row.traffictype2" placeholder="è¿å交éå·¥å ·"> <el-option v-for="dict in dict.type.sys_traffictype" :key="dict.value" :label="dict.label" :value="dict.label"></el-option> <el-select v-model="scope.row.traffictype2" placeholder="è¿å交éå·¥å ·" > <el-option v-for="dict in dict.type.sys_traffictype" :key="dict.value" :label="dict.label" :value="dict.label" ></el-option> </el-select> </template> </el-table-column> <el-table-column prop="trafficexpense" label="交éè´¹" align="center" width="80"> <el-table-column prop="trafficexpense" label="交éè´¹" align="center" width="80" > <template slot-scope="scope"> <el-input v-model="scope.row.trafficexpense" placeholder="交éè´¹" @blur="(val) => { sumRowFee(scope.row); } " /> <el-input v-model="scope.row.trafficexpense" placeholder="交éè´¹" @blur=" val => { sumRowFee(scope.row); } " /> </template> </el-table-column> <!-- @@ -396,64 +747,144 @@ </template> </el-table-column> --> <el-table-column prop="hotelexpense" label="ä½å®¿è´¹" align="center" width="80"> <el-table-column prop="hotelexpense" label="ä½å®¿è´¹" align="center" width="80" > <template slot-scope="scope"> <el-input v-model="scope.row.hotelexpense" placeholder="ä½å®¿è´¹" @blur="(val) => { sumRowFee(scope.row); } " /> <el-input v-model="scope.row.hotelexpense" placeholder="ä½å®¿è´¹" @blur=" val => { sumRowFee(scope.row); } " /> </template> </el-table-column> <el-table-column prop="foodexpenses" label="é¤è´¹æ¥é" align="center" width="80"> <el-table-column prop="foodexpenses" label="é¤è´¹æ¥é" align="center" width="80" > <template slot-scope="scope"> <el-input v-model="scope.row.foodexpenses" placeholder="ä¼é£è´¹æ¥é" @blur="(val) => { sumRowFee(scope.row); } " /> <el-input v-model="scope.row.foodexpenses" placeholder="ä¼é£è´¹æ¥é" @blur=" val => { sumRowFee(scope.row); } " /> </template> </el-table-column> <el-table-column prop="foodallowance" label="ä¼é£è¡¥å©" align="center" width="80"> <el-table-column prop="foodallowance" label="ä¼é£è¡¥å©" align="center" width="80" > <template slot-scope="scope"> <el-input v-model="scope.row.foodallowance" placeholder="ä¼é£è´¹è¡¥å©" @blur="(val) => { sumRowFee(scope.row); } " /> <el-input v-model="scope.row.foodallowance" placeholder="ä¼é£è´¹è¡¥å©" @blur=" val => { sumRowFee(scope.row); } " /> </template> </el-table-column> <el-table-column prop="otherexpense" label="å ¬æè´¹è¡¥å©" align="center" width="80"> <el-table-column prop="otherexpense" label="å ¬æè´¹è¡¥å©" align="center" width="80" > <template slot-scope="scope"> <el-input v-model="scope.row.otherexpense" placeholder="æè´¹" @blur="(val) => { sumRowFee(scope.row); } " /> <el-input v-model="scope.row.otherexpense" placeholder="æè´¹" @blur=" val => { sumRowFee(scope.row); } " /> </template> </el-table-column> <el-table-column prop="otherfeeamount" label="å ¶ä»è´¹ç¨" align="center" width="90"> <el-table-column prop="otherfeeamount" label="å ¶ä»è´¹ç¨" align="center" width="90" > <template slot-scope="scope"> <el-input v-model="scope.row.otherfeeamount" placeholder="å ¶ä»è´¹ç¨" @blur="(val) => { sumRowFee(scope.row); } " /> <el-input v-model="scope.row.otherfeeamount" placeholder="å ¶ä»è´¹ç¨" @blur=" val => { sumRowFee(scope.row); } " /> </template> </el-table-column> <el-table-column prop="departure" slot="" label="å ¶ä»è´¹ç¨è¯´æ" align="center" width="120"> <el-table-column prop="departure" slot="" label="å ¶ä»è´¹ç¨è¯´æ" align="center" width="120" > <template slot-scope="scope"> <el-input v-model="scope.row.otherfeedesc" placeholder="å ¶ä»è´¹ç¨è¯´æ" /> <el-input v-model="scope.row.otherfeedesc" placeholder="å ¶ä»è´¹ç¨è¯´æ" /> </template> </el-table-column> <el-table-column prop="total" label="å计" align="center" width="110"> <el-table-column prop="total" label="å计" align="center" width="110" > <template slot-scope="scope"> <el-input v-model="scope.row.total" placeholder="å计" /> </template> </el-table-column> <el-table-column fixed="right" label="æä½" align="center" width="120" v-if="dialogType == 'edit'"> <el-table-column fixed="right" label="æä½" align="center" width="120" v-if="dialogType == 'edit'" > <template slot-scope="scope"> <el-button type="text" size="mini" @click="addDetailRow(scope.$index)">æ°å¢</el-button> <el-button @click.native.prevent="deleteDetailRow(scope.$index, rbDetails, scope.row) " type="text" size="small"> <el-button type="text" size="mini" @click="addDetailRow(scope.$index)" >æ°å¢</el-button > <el-button @click.native.prevent=" deleteDetailRow(scope.$index, rbDetails, scope.row) " type="text" size="small" > å é¤ </el-button> </template> @@ -465,80 +896,197 @@ </el-row> <el-row style="margin-top: 30px"> <el-table :data="rbPayees" border highlight-current-row> <el-table-column prop="orderno" slot="" label="åºå·" align="center" fixed width="65"> <el-table-column prop="orderno" slot="" label="åºå·" align="center" fixed width="65" > <template slot-scope="scope"> <el-input v-model="scope.row.orderno" placeholder="åºå·" /> </template> </el-table-column> <!--主é®ãå¤é®ä¸å±ç¤º--> <el-table-column prop="id" slot="" label="主é®" align="center" fixed width="95" v-if="false"> <el-table-column prop="id" slot="" label="主é®" align="center" fixed width="95" v-if="false" > <template slot-scope="scope"> <el-input v-model="scope.row.id" placeholder="id" /> </template> </el-table-column> <el-table-column prop="rbid" slot="" label="å¤é®" align="center" fixed width="95" v-if="false"> <el-table-column prop="rbid" slot="" label="å¤é®" align="center" fixed width="95" v-if="false" > <template slot-scope="scope"> <el-input v-model="scope.row.rbid" placeholder="rbid" /> </template> </el-table-column> <el-table-column prop="persontype" slot="" label="人åç±»å«" align="center" fixed width="130"> <el-table-column prop="persontype" slot="" label="人åç±»å«" align="center" fixed width="130" > <template slot-scope="scope"> <el-select v-model="scope.row.persontype" value-key="value" placeholder="人åç±»å«" @change="getPersons(scope.row)"> <el-option v-for="dict in dict.type.sys_travelexpensebelong" :key="dict.value" :label="dict.label" :value="dict.label"></el-option> <el-select v-model="scope.row.persontype" value-key="value" placeholder="人åç±»å«" @change="getPersons(scope.row)" > <el-option v-for="dict in dict.type.sys_travelexpensebelong" :key="dict.value" :label="dict.label" :value="dict.label" ></el-option> </el-select> </template> </el-table-column> <el-table-column prop="personname" slot="" label="æ¶æ¬¾äºº" align="center" fixed width="110"> <el-table-column prop="personname" slot="" label="æ¶æ¬¾äºº" align="center" fixed width="110" > <template slot-scope="scope"> <el-select v-model="scope.row.personname" clearable filterable allow-create ref="getReportname" default-first-option placeholder="è¯·éæ©" @change="getAccountinfo2(scope.row, scope.row.persontype)"> <el-option v-for="item in personsSel" :key="item.reportNo" :label="item.reportName" :value="item.reportName"> <el-select v-model="scope.row.personname" clearable filterable allow-create ref="getReportname" default-first-option placeholder="è¯·éæ©" @change="getAccountinfo2(scope.row, scope.row.persontype)" > <el-option v-for="item in personsSel" :key="item.reportNo" :label="item.reportName" :value="item.reportName" > </el-option> </el-select> </template> </el-table-column> <el-table-column prop="bankname" slot="" label="é¶è¡åç§°" align="center" fixed width="200"> <el-table-column prop="bankname" slot="" label="é¶è¡åç§°" align="center" fixed width="200" > <template slot-scope="scope"> <el-input v-model="scope.row.bankname" placeholder="é¶è¡åç§°" /> </template> </el-table-column> <el-table-column prop="bankcardno" slot="" label="é¶è¡å¡å·" align="center" fixed width="200"> <el-table-column prop="bankcardno" slot="" label="é¶è¡å¡å·" align="center" fixed width="200" > <template slot-scope="scope"> <el-input v-model="scope.row.bankcardno" placeholder="é¶è¡å¡å·" /> <el-input v-model="scope.row.bankcardno" placeholder="é¶è¡å¡å·" /> </template> </el-table-column> <el-table-column prop="amount" slot="" label="ææ¬¾éé¢" align="center" fixed width="130"> <el-table-column prop="amount" slot="" label="ææ¬¾éé¢" align="center" fixed width="130" > <template slot-scope="scope"> <el-input v-model="scope.row.amount" placeholder="ææ¬¾éé¢" /> </template> </el-table-column> <el-table-column prop="remark" slot="" label="请款说æ" align="center" fixed width="280"> <el-table-column prop="remark" slot="" label="请款说æ" align="center" fixed width="280" > <template slot-scope="scope"> <el-input v-model="scope.row.remark" placeholder="说æ" /> </template> </el-table-column><el-table-column prop="paiddate" slot="" label="ææ¬¾æ¥æ" fixed align="center" width="150"> </template> </el-table-column ><el-table-column prop="paiddate" slot="" label="ææ¬¾æ¥æ" fixed align="center" width="150" > <template slot-scope="scope"> <el-date-picker clearable size="small" style="width: 100%" v-model="scope.row.paiddate" type="date" value-format="yyyy-MM-dd HH:mm:ss" placeholder="ææ¬¾æ¥æ" :disabled="true"> <el-date-picker clearable size="small" style="width: 100%" v-model="scope.row.paiddate" type="date" value-format="yyyy-MM-dd HH:mm:ss" placeholder="ææ¬¾æ¥æ" :disabled="true" > </el-date-picker> </template> </el-table-column> <el-table-column label="æä½" align="center" width="100" v-if="dialogType == 'edit'"> <el-table-column label="æä½" align="center" width="100" v-if="dialogType == 'edit'" > <template slot-scope="scope"> <el-button type="text" size="mini" @click="addPayeeRow(scope.$index)">æ°å¢</el-button> <el-button @click.native.prevent="deletePayeeRow(scope.$index, rbPayees, scope.row) " type="text" size="small"> <el-button type="text" size="mini" @click="addPayeeRow(scope.$index)" >æ°å¢</el-button > <el-button @click.native.prevent=" deletePayeeRow(scope.$index, rbPayees, scope.row) " type="text" size="small" > å é¤ </el-button> </template> </el-table-column> </el-table> </el-row> <!-- @@ -580,30 +1128,76 @@ --> <el-form-item label="æä»¶ä¸ä¼ " align="left" prop="annexfiles"> <!-- <file-upload ref="fileUpload" :fileType=fileType :limit="1" :on-success="handleUploadSuccess"></file-upload> --> <el-upload size="mini" class="upload-demo" :action="uploadFileUrl" :file-list="fileList" multiple :limit="20" :headers="headers" :on-success="(response, file, fileList) => uploadSccess(response, file, fileList) " :on-preview="downFile" :disabled='dialogType == "detail"' :on-error="handleUploadError" :on-exceed="handleExceed" :on-remove="remove" accept="image/*,.pdf"> <el-button :disabled='dialogType == "detail"' size="small" type="primary">ä¸ä¼ </el-button> <el-upload size="mini" class="upload-demo" :action="uploadFileUrl" :file-list="fileList" multiple :limit="20" :headers="headers" :on-success=" (response, file, fileList) => uploadSccess(response, file, fileList) " :on-preview="downFile" :disabled="dialogType == 'detail'" :on-error="handleUploadError" :on-exceed="handleExceed" :on-remove="remove" accept="image/*,.pdf" > <el-button :disabled="dialogType == 'detail'" size="small" type="primary" >ä¸ä¼ </el-button > </el-upload> </el-form-item> </el-col> </el-row> <el-row v-if="dialogType == 'detail'"> <el-table :data="fundflowList" border> <el-table-column label="å®¡æ ¸äºº" align="center" width="120" prop="checkusername" /> <el-table-column label="å®¡æ ¸æ¥æ" align="center" width="160" prop="createTime" /> <el-table-column label="å®¡æ ¸ç»æ" align="center" width="200" prop="flowconclusion"><template slot-scope="scope"><span v-if="scope.row.flowconclusion == 1">éè¿</span><span v-if="scope.row.flowconclusion == 2">ä¸éè¿</span></template> <el-table-column label="å®¡æ ¸äºº" align="center" width="120" prop="checkusername" /> <el-table-column label="å®¡æ ¸æ¥æ" align="center" width="160" prop="createTime" /> <el-table-column label="å®¡æ ¸ç»æ" align="center" width="200" prop="flowconclusion" ><template slot-scope="scope" ><span v-if="scope.row.flowconclusion == 1">éè¿</span ><span v-if="scope.row.flowconclusion == 2" >ä¸éè¿</span ></template > </el-table-column> <el-table-column label="å®¡æ ¸å¤æ³¨" align="center" prop="flowcontent" /> <el-table-column label="å®¡æ ¸å¤æ³¨" align="center" prop="flowcontent" /> </el-table> </el-row> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="submitForm" v-if="dialogType == 'edit'">ä¿ å</el-button> <el-button type="primary" @click="submitForm" v-if="dialogType == 'edit'" >ä¿ å</el-button > <el-button @click="cancel">å æ¶</el-button> </div> </el-dialog> @@ -614,7 +1208,11 @@ import Treeselect from "@riophae/vue-treeselect"; import "@riophae/vue-treeselect/dist/vue-treeselect.css"; import { listDonatebaseinfo } from "@/api/project/donatebaseinfo"; import { listReimbursementpayee, addReimbursementpayee, updateReimbursementpayee } from "@/api/project/reimbursementpayee"; import { listReimbursementpayee, addReimbursementpayee, updateReimbursementpayee } from "@/api/project/reimbursementpayee"; import { listReimbursement, getReimbursement, @@ -623,7 +1221,7 @@ updateReimbursement, exportReimbursement, getdownload, fundSubmit, fundSubmit } from "@/api/project/reimbursement"; import { addReimbursementdetail, @@ -632,13 +1230,13 @@ getReimbursementdetaillist, delReimbursementdetail, addOrupdateReimbursementdetaillist, getTravelStandard, getTravelStandard } from "@/api/project/reimbursementdetail"; import { listFundflow } from "@/api/project/fundflow"; import { getInfoBytheUserNo } from "@/api/project/externalperson"; import { regionDataPlus, CodeToText } from "element-china-area-data"; import Li_area_select from "@/components/Address"; import { getUser,getUserProfile } from "@/api/system/user"; import { getUser, getUserProfile } from "@/api/system/user"; import { treeselect } from "@/api/system/dept"; import { getSubsidy } from "@/api/project/travelcity"; import { listReportname, listUser } from "@/api/project/organization"; @@ -646,7 +1244,7 @@ export default { components: { Treeselect, Li_area_select, Li_area_select }, name: "Funddetail", dicts: [ @@ -657,7 +1255,7 @@ "sys_recordstatus", "sys_travelexpensebelong", "sys_traffictype", "sys_area_name", "sys_area_name" ], data() { return { @@ -671,14 +1269,14 @@ personsExpert: [], //å ¨é¨äººå personsList: [], //䏿å¯ä»¥éæ©äººåå表 personsSel: [], //䏿å¯ä»¥éæ©äººåå表 personsSel: [], // é¨é¨æ é项 deptOptions: undefined, costtypeobj: { value: 0, label: "", label: "" }, options: regionDataPlus, @@ -686,7 +1284,7 @@ searchAddress: { sheng: "", shi: "", qu: "", qu: "" }, value1: "", // é®ç½©å± @@ -724,20 +1322,20 @@ uploadTime: null, // orderByColumn: "createTime", orderByColumn: "id", isAsc: "desc", isAsc: "desc" }, queryParams2: { persontype: null, arriveAddr: null, arriveAddr: null }, feesParams: { beneficiaryNo: null, starttime: null, endtime: null, endtime: null }, //æ¥è¯¢ä»æ¬¾ queryParamsPayee: { rbid: null, rbid: null }, // 表ååæ° form: {}, @@ -746,21 +1344,21 @@ // è¡¨åæ ¡éª rules: { createTime: [ { required: true, message: "请è¾å ¥å¡«æ¥æ¥æ", trigger: "blur" }, { required: true, message: "请è¾å ¥å¡«æ¥æ¥æ", trigger: "blur" } ], reason: [ { required: true, message: "请è¾å ¥åºå·®äºç±", trigger: "blur" }, { required: true, message: "请è¾å ¥åºå·®äºç±", trigger: "blur" } ], deptmentname: [ { required: true, message: "请è¾å ¥æå±ä¸å¡ç»", trigger: "blur" }, ], { required: true, message: "请è¾å ¥æå±ä¸å¡ç»", trigger: "blur" } ] }, //è´¹ç¨ç³è¯·åform applicationForm: { applicationType: null, donorno: null, donorname: null, bigstrmoney: null, bigstrmoney: null }, rbDetails: [], @@ -784,8 +1382,8 @@ arriveAddr: null, headers: { Authorization: "Bearer " + getToken(), }, Authorization: "Bearer " + getToken() } }; }, @@ -799,14 +1397,14 @@ mounted() { //è·åæç®è å§å listDonatebaseinfo().then((res) => { listDonatebaseinfo().then(res => { let list = res.rows; let baseinfolist = []; this.donatorList = list; list.forEach((element) => { list.forEach(element => { baseinfolist.push({ infoid: element.id, name: element.name, name: element.name }); }); @@ -822,10 +1420,10 @@ }, methods: { handleUploadError() { }, handleUploadError() {}, remove(file) { this.fileList.splice(this.fileList.indexOf(file), 1) this.fileList.splice(this.fileList.indexOf(file), 1); }, handleExceed() { @@ -847,7 +1445,7 @@ //è·åç»å½ç¨æ·ä¿¡æ¯ getUsermsg() { getUserProfile().then((response) => { getUserProfile().then(response => { this.defaultperson = response.data; this.standardlevel = response.data.standardlevel; }); @@ -863,22 +1461,22 @@ //è·å人åå表 getPersonList() { //è·åOPOåè°ååå listReportname("xty1").then((res) => { listReportname("xty1").then(res => { this.personsXty = res.data; this.personsList = this.personsXty; //OPOä¸è人ååå listReportname("zzry").then((res) => { listReportname("zzry").then(res => { this.personsZzry = res.data; this.personsList = this.personsList.concat(this.personsZzry); //OPO管ç人ååå listReportname("fzr").then((res) => { listReportname("fzr").then(res => { this.personsManager = res.data; this.personsList = this.personsList.concat(this.personsManager); //OPOä¸å®¶åå listReportname("expert").then((res) => { listReportname("expert").then(res => { this.personsExpert = res.data; this.personsList = this.personsList.concat(this.personsExpert); }); @@ -906,9 +1504,9 @@ //è·å设置人åè´¦å·ä¿¡æ¯ getAccountinfo() { this.coltravelers.map((res) => { this.coltravelers.map(res => { if (res.reportName == this.form.travelers) { getInfoBytheUserNo(res.reportNo).then((res) => { getInfoBytheUserNo(res.reportNo).then(res => { this.form.depositbank = res.data.depositbank; this.form.bankcardno = res.data.bankcardno; this.form.phone = res.data.telephone; @@ -920,13 +1518,13 @@ //è·å设置人åè´¦å·ä¿¡æ¯ getAccountinfo2(row, personType) { let dataArr = []; if (personType == 'ä¸è人å') { if (personType == "ä¸è人å") { dataArr = this.personsZzry; } else if (personType == 'åè°å') { } else if (personType == "åè°å") { dataArr = this.personsXty; } else if (personType == 'ä¸å®¶') { } else if (personType == "ä¸å®¶") { dataArr = this.personsExpert; } else if (personType == '管ç人å') { } else if (personType == "管ç人å") { dataArr = this.personsManager; } @@ -934,18 +1532,28 @@ if (dataArr[m].reportName == row.personname) { row.bankname = dataArr[m].depositbank; row.bankcardno = dataArr[m].bankcardno; }; } } }, //è®¡ç®æ¥æ getdays(row) { if (row.starttime != "" && row.starttime != null && row.endtime != "" && row.endtime != null) { if ( row.starttime != "" && row.starttime != null && row.endtime != "" && row.endtime != null ) { //计ç®å¤©æ° row.days = (Math.floor(Math.abs(Date.parse(row.starttime) - Date.parse(row.endtime)) / (1000 * 3600 * 24)) + 1).toString() row.days = ( Math.floor( Math.abs(Date.parse(row.starttime) - Date.parse(row.endtime)) / (1000 * 3600 * 24) ) + 1 ).toString(); } else { row.days = 0; }; } //计ç®è¡¥å© this.getallowance(row); @@ -953,27 +1561,29 @@ //计ç®è¡¥å© getallowance(row) { console.log("ro",row); console.log("ro", row); //å ¬æè´¹è¡¥å©ï¼æå·æ¡åºï¼å»ºå¾·ï¼æ·³å®60ï¼æå·å ¶ä»å°åº0ï¼éæå·å°åº80 if (row.destination != "") { var tempStr = row.destination; //éªè¯åå¸ if (tempStr == "æå·") { row.otherexpense = ''; } else if (tempStr == "æå·-æ¡åº" || tempStr == "æå·-建德" || tempStr == "æå·-æ·³å®") { row.otherexpense = ""; } else if ( tempStr == "æå·-æ¡åº" || tempStr == "æå·-建德" || tempStr == "æå·-æ·³å®" ) { row.otherexpense = (parseInt(row.days) * 60).toString(); } else { } else { row.otherexpense = (parseInt(row.days) * 80).toString(); }; } } //ä¼é£è´¹è¡¥å©ï¼åå¸ï¼è¥¿èï¼æ°çï¼éæµ·.120ï¼ï¼å ¶ä»100ï¼ row.foodallowance = (parseInt(row.days) * 100).toString(); //计ç®å计 //计ç®å计 this.sumRowFee(row); }, @@ -981,14 +1591,16 @@ this.arriveAddr = val2; this.queryParams2.arriveAddr; this.queryParams2.personType = row; if (row.persontype != undefined && row.persontype == "åè°å" || row.persontype == "管ç人å") { if ( (row.persontype != undefined && row.persontype == "åè°å") || row.persontype == "管ç人å" ) { this.loading = true; getSubsidy(val2).then((response) => { getSubsidy(val2).then(response => { this.loading = false; row.otherexpense = response.data.others; row.foodallowance = response.data.food; }); } }, @@ -1010,11 +1622,11 @@ .format("YYYY-MM-DD"), paprovincecode: this.$refs["residenceSelect_" + row.index].getSheng(), patowncode: this.$refs["residenceSelect_" + row.index].getQu(), standardlevel: this.standardlevel, standardlevel: this.standardlevel }; getTravelStandard(info) .then((response) => { .then(response => { let fee = 0; for (let i = 0; i < response.data.length; i++) { fee += response.data[i].reimbursementamout; @@ -1040,8 +1652,9 @@ row.searchAddress.shi + row.searchAddress.qu; row.travelprovincename = row.searchAddress.sheng; row.travelprovince = this.$refs["residenceSelect_" + row.index].getSheng(); row.travelprovince = this.$refs[ "residenceSelect_" + row.index ].getSheng(); row.travelcityname = row.searchAddress.shi; row.travelcity = this.$refs["residenceSelect_" + row.index].getShi(); row.traveltownname = row.searchAddress.qu; @@ -1083,7 +1696,7 @@ //è·åæç®è åºæ¬ä¿¡æ¯ï¼æç®ç¼å·ãæç®è å§å selectbaseinfo() { let list = this.donatorList; list.forEach((item) => { list.forEach(item => { if (item.id == this.form.infoid) { this.form.donorno = item.donorno; this.form.donorname = item.name; @@ -1097,7 +1710,7 @@ gettable(e) { const id = e.id; getdownload(e.id).then((res) => { getdownload(e.id).then(res => { var fileUrl = res; //è·åå½åç½å var urlBase = process.env.VUE_APP_BASE_API; @@ -1127,17 +1740,15 @@ /** æ¥è¯¢æ¥éç³è¯·å表 */ getList() { this.loading = true; listReimbursement(this.queryParams).then((response) => { listReimbursement(this.queryParams).then(response => { this.reimbursementList = response.rows; this.total = response.total; this.loading = false; }); }, // åæ¶æé® cancel() { this.open = false; }, // 表åéç½® reset() { @@ -1184,7 +1795,7 @@ uploadflag: null, uploadtime: null, costtype: null, costtypename: null, costtypename: null }; this.rbDetails = []; this.rbPayees = []; @@ -1197,9 +1808,9 @@ // ä¸è½½æä»¶ downFile(item) { const url = process.env.VUE_APP_BASE_API + item.url var a = document.createElement('a'); var event = new MouseEvent('click'); const url = process.env.VUE_APP_BASE_API + item.url; var a = document.createElement("a"); var event = new MouseEvent("click"); a.download = item.name; a.href = url; a.dispatchEvent(event); @@ -1227,7 +1838,7 @@ }, // å¤éæ¡é䏿°æ® handleSelectionChange(selection) { this.ids = selection.map((item) => item.id); this.ids = selection.map(item => item.id); this.single = selection.length !== 1; this.multiple = !selection.length; }, @@ -1253,24 +1864,33 @@ /** ä¿®æ¹æé®æä½ */ handleUpdate(row) { this.$router.push({ path: "finance/travelexpenseslist/Modifydetails/", query: { id: row.id, pos: 1 } }); this.dialogType = "edit"; this.reset(); this.open = true; // this.open = true; this.title = "ä¿®æ¹æ¥éç³è¯·"; //è·åæ¥éä¸»ä¿¡æ¯ const id = row.id || this.ids; getReimbursement(id).then((response) => { getReimbursement(id).then(response => { this.form = response.data; this.fileList = this.form.annexfiles ? this.form.annexfiles.split(",").map(item => ({ url: item, name: item })) : [] this.fileList = this.form.annexfiles ? this.form.annexfiles .split(",") .map(item => ({ url: item, name: item })) : []; this.form.recordstatus = response.data.recordstatus + ""; let ids = response.data.id; //è·åæ¥éæç»ä¿¡æ¯ getReimbursementdetaillist(ids).then((res) => { getReimbursementdetaillist(ids).then(res => { this.rbDetails = res.data; if (this.rbDetails.length == 0) { this.addDetailRow(0); } if (this.rbDetails.length == 0) { this.addDetailRow(0); } for (let i = 0; i < this.rbDetails.length; i++) { this.sumRowFee(this.rbDetails[i]); @@ -1290,15 +1910,21 @@ //è·åæ¥éææ¬¾ä¿¡æ¯ this.queryParamsPayee.rbid = ids; listReimbursementpayee(this.queryParamsPayee).then((res) => { listReimbursementpayee(this.queryParamsPayee).then(res => { this.rbPayees = res.rows; if (this.rbPayees.length == 0) { this.addPayeeRow(0); } if (this.rbPayees.length == 0) { this.addPayeeRow(0); } }); }); }, /** æ¥çæé®æä½ */ handleDetail(row) { this.$router.push({ path: "/finance/travelexpenseslist/Modifydetails/", query: { id: row.id, pos: 2 } }); this.dialogType = "detail"; this.title = "æ¥çæ¥éç³è¯·"; @@ -1306,11 +1932,14 @@ this.open = true; const id = row.id || this.ids; getReimbursement(id).then((response) => { getReimbursement(id).then(response => { this.form = response.data; //éä»¶ this.fileList = this.form.annexfiles ? this.form.annexfiles.split(",").map(item => ({ url: item, name: item })) : [] this.fileList = this.form.annexfiles ? this.form.annexfiles .split(",") .map(item => ({ url: item, name: item })) : []; //å®¡æ ¸ç¶æ this.form.recordstatus = response.data.recordstatus + ""; @@ -1318,14 +1947,14 @@ let ids = response.data.id; let listFundflowparams = { fundid: row.id, fundtype: 1, fundtype: 1 }; listFundflow(listFundflowparams).then((res) => { listFundflow(listFundflowparams).then(res => { this.fundflowList = res.rows; }); //æ¥éæç» getReimbursementdetaillist(ids).then((res) => { getReimbursementdetaillist(ids).then(res => { this.rbDetails = res.data; /* for (let i = 0; i < this.rbDetails.length; i++) { @@ -1341,20 +1970,20 @@ if (this.rbDetails.length > 0) this.sumTotalFee(); //仿¬¾ä¿¡æ¯ //仿¬¾ä¿¡æ¯ this.queryParamsPayee.rbid = ids; listReimbursementpayee(this.queryParamsPayee).then((res) => { listReimbursementpayee(this.queryParamsPayee).then(res => { this.rbPayees = res.rows; if (this.rbPayees.length == 0) { this.addPayeeRow(0); } if (this.rbPayees.length == 0) { this.addPayeeRow(0); } }); }); }, /** æäº¤æé® */ submitForm() { this.$refs["form"].validate((valid) => { this.$refs["form"].validate(valid => { if (valid) { /** let indexErrTime = this.rbDetails.findIndex((item) => { @@ -1419,72 +2048,80 @@ } //æ ¡éªè¯·æ¬¾éé¢å计æ¯å¦çäºæ¥éåéé¢ if (this.form.amountrequested != this.rbPayees.reduce((amount, item) => amount + Number(item.amount), 0.0)) { if ( this.form.amountrequested != this.rbPayees.reduce( (amount, item) => amount + Number(item.amount), 0.0 ) ) { this.$message({ message: "æ¥é请款表ä¸å计éé¢ä¸çäºæ¥éåçæ¥ééé¢ï¼è¯·æ´æ£ååä¿åï¼", type: "warning", message: "æ¥é请款表ä¸å计éé¢ä¸çäºæ¥éåçæ¥ééé¢ï¼è¯·æ´æ£ååä¿åï¼", type: "warning" }); return; } const rbDetails = [...this.rbDetails] const rbPayees = [...this.rbPayees] const rbDetails = [...this.rbDetails]; const rbPayees = [...this.rbPayees]; if (this.form.id != null) { updateReimbursement(this.form).then((res) => { //ä¿åæç» for (let i = 0; i < rbDetails.length; i++) { if (rbDetails[i].rbid != null) { updateReimbursementdetail(rbDetails[i]); } else { updateReimbursement(this.form) .then(res => { //ä¿åæç» for (let i = 0; i < rbDetails.length; i++) { if (rbDetails[i].rbid != null) { updateReimbursementdetail(rbDetails[i]); } else { //rbidå ³è主表Id rbDetails[i].rbid = this.form.id; addReimbursementdetail(rbDetails[i]); } } //ä¿åè´¦æ· for (let i = 0; i < rbPayees.length; i++) { if (rbPayees[i].rbid != null) { updateReimbursementpayee(rbPayees[i]); } else { //rbidå ³è主表Id rbPayees[i].rbid = this.form.id; addReimbursementpayee(rbPayees[i]); } } this.$modal.msgSuccess("ä¿®æ¹æ¥éåä¿åæå!"); this.open = false; this.getList(); }) .catch(err => { this.$modal.msgError("ä¿®æ¹æ¥éåä¿å失败ï¼"); }); } else { this.form.recordstatus = -1; addReimbursement(this.form) .then(response => { //ä¿åæç» for (let i = 0; i < rbDetails.length; i++) { //rbidå ³è主表Id rbDetails[i].rbid = this.form.id; rbDetails[i].rbid = response.data; addReimbursementdetail(rbDetails[i]); } } //ä¿åè´¦æ· for (let i = 0; i < rbPayees.length; i++) { if (rbPayees[i].rbid != null) { updateReimbursementpayee(rbPayees[i]); } else { //ä¿åè´¦å· for (let i = 0; i < rbPayees.length; i++) { //rbidå ³è主表Id rbPayees[i].rbid = this.form.id; rbPayees[i].rbid = response.data; addReimbursementpayee(rbPayees[i]); } } this.$modal.msgSuccess("ä¿®æ¹æ¥éåä¿åæå!"); this.open = false; this.getList(); }).catch(err => { this.$modal.msgError("ä¿®æ¹æ¥éåä¿å失败ï¼"); }); } else { this.form.recordstatus = -1; addReimbursement(this.form).then((response) => { //ä¿åæç» for (let i = 0; i < rbDetails.length; i++) { //rbidå ³è主表Id rbDetails[i].rbid = response.data; addReimbursementdetail(rbDetails[i]); } //ä¿åè´¦å· for (let i = 0; i < rbPayees.length; i++) { //rbidå ³è主表Id rbPayees[i].rbid = response.data; addReimbursementpayee(rbPayees[i]); } this.$modal.msgSuccess("æ°å¢æ¥éåä¿åæå!"); this.open = false; this.getList(); }).catch(err => { this.$modal.msgError("æ°å¢æ¥éåä¿å失败ï¼"); }); this.$modal.msgSuccess("æ°å¢æ¥éåä¿åæå!"); this.open = false; this.getList(); }) .catch(err => { this.$modal.msgError("æ°å¢æ¥éåä¿å失败ï¼"); }); } } }); @@ -1495,7 +2132,7 @@ const ids = row.id || this.ids; this.$modal .confirm("æ¯å¦ç¡®è®¤å é¤è¯¥æ¡è®°å½ï¼") .then(function () { .then(function() { // å é¤detailså çæ°æ® return delReimbursement(ids); }) @@ -1504,7 +2141,7 @@ this.getList(); this.$modal.msgSuccess("å 餿å"); }) .catch(() => { }); .catch(() => {}); }, /** å¯¼åºæé®æä½ */ @@ -1516,11 +2153,11 @@ this.exportLoading = true; return exportReimbursement(queryParams); }) .then((response) => { .then(response => { this.$download.name(response.msg); this.exportLoading = false; }) .catch(() => { }); .catch(() => {}); }, //æ°å¢ä¸è¡ @@ -1530,7 +2167,7 @@ searchAddress: { sheng: "", shi: "", qu: "", qu: "" }, id: null, rbid: null, @@ -1563,7 +2200,7 @@ orderno: null, personname2: null, personname: null, destination: null, destination: null }; if (rowIndex == undefined || rowIndex == null || rowIndex < 0) { this.rbDetails.push(rowData); @@ -1586,7 +2223,7 @@ remark: null, orderno: null, personname: null, amount: null, amount: null }; if (rowIndex == undefined || rowIndex == null || rowIndex <= 0) { this.rbPayees.push(rowData); @@ -1602,12 +2239,12 @@ this.$confirm("æ¯å¦ç¡®è®¤å é¤?", "æç¤º", { confirmButtonText: "ç¡®å®", cancelButtonText: "åæ¶", type: "success", type: "success" }) .then(() => { console.log(row); if (row.id !== null) { delReimbursementdetail(row.id).then((res) => { delReimbursementdetail(row.id).then(res => { this.$modal.msgSuccess("å 餿å"); rows.splice(index, 1); this.recountOrderNo(); @@ -1629,12 +2266,12 @@ this.$confirm("æ¯å¦ç¡®è®¤å é¤?", "æç¤º", { confirmButtonText: "ç¡®å®", cancelButtonText: "åæ¶", type: "success", type: "success" }) .then(() => { console.log(row); if (row.id !== null) { delReimbursementdetail(row.id).then((res) => { delReimbursementdetail(row.id).then(res => { this.$modal.msgSuccess("å 餿å"); rows.splice(index, 1); this.recountOrderNo2(); @@ -1669,24 +2306,24 @@ this.$confirm("æ¯å¦ç¡®è®¤å°ç»è®°è®°å½ä¸æ¥ï¼", "æç¤º", { confirmButtonText: "ç¡®å®", cancelButtonText: "åæ¶", type: "warning", type: "warning" }) .then(() => { //è°ç¨å·®æ è´¹ä¸æ¥æ¥å£ let tempParam = { fundid: row.id, fundid: row.id }; fundSubmit(tempParam).then((response) => { fundSubmit(tempParam).then(response => { if (response.code == 200) { this.getList(); this.$message({ type: "success", message: "䏿¥æå", message: "䏿¥æå" }); } else { this.$message({ type: "error", message: "䏿¥å¤±è´¥", message: "䏿¥å¤±è´¥" }); } this.loading = false; @@ -1695,7 +2332,7 @@ .catch(() => { this.$message({ type: "info", message: "已忶ç³è¯·", message: "已忶ç³è¯·" }); }); }, @@ -1803,13 +2440,24 @@ this.form.amountrequested = allSum.toFixed(2); this.form.bigstrmoney = this.convertCurrency(this.form.amountrequested); } catch { } } catch {} }, //é颿°åè½¬æ¢æå¤§å convertCurrency(money) { //æ±åçæ°å var cnNums = new Array("é¶", "壹", "è´°", "å", "è", "ä¼", "é", "æ", "æ", "ç"); var cnNums = new Array( "é¶", "壹", "è´°", "å", "è", "ä¼", "é", "æ", "æ", "ç" ); //åºæ¬åä½ var cnIntRadice = new Array("", "æ¾", "ä½°", "ä»"); //å¯¹åºæ´æ°é¨åæ©å±åä½ @@ -1893,7 +2541,7 @@ chineseStr += cnInteger; } return chineseStr; }, }, } } }; </script> </script>