| | |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-row :gutter="10" class="mb8" v-if="userId != 2"> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | |
| | | icon="el-icon-delete" |
| | | size="mini" |
| | | :disabled="multiple" |
| | | @click="handleDelete1" |
| | | @click="handleDelete" |
| | | v-hasPermi="['system:role:remove']" |
| | | >删除</el-button> |
| | | </el-col> |
| | |
| | | <!-- 序号、基金/台账、时间、收入/支出、用途、使用人、现金/自动扣划、余额、电子文件、备注 操作--> |
| | | <!-- 这里有个familyList数组 是在data()中定义的 --> |
| | | <el-table v-loading="loading" :data="travelpriceList" @row-click="getRowId" @selection-change="handleSelectionChange" :row-class-name="tableRowClassName" style="background: #FFEFF2; border-radius: 14px 14px 14px 14px;"> |
| | | <el-table-column type="selection" :reserve-selection="true" width="55" align="center" /> |
| | | <el-table-column type="expand" :cell-class-name="expandRowClassName"> |
| | | <template slot-scope="props"> |
| | | <div > |
| | |
| | | <el-table-column label="住宿费" prop="stay" sortable width="100px" /> |
| | | <el-table-column label="交通" prop="travel" sortable width="70px" /> |
| | | <el-table-column label="门票" prop="entrance" sortable width="70px" /> |
| | | <!-- <el-table-column label="购物" prop="shopping" sortable width="70px" />--> |
| | | <el-table-column label="其它费用" prop="otherCost" sortable width="120px" /> |
| | | <el-table-column label="备注" prop="backInfo" sortable width="120px" /> |
| | | |
| | | <el-table-column label="电子文件" prop="url" width="160" > |
| | | <template slot-scope="scope" > |
| | | <img |
| | |
| | | alt="" |
| | | style="width: 35px; height: 35px;" |
| | | fit="cover" |
| | | v-if="!scope.row.url " |
| | | v-if="scope.row.url" |
| | | > |
| | | <img |
| | | class="el-upload-list__item-thumbnail" |
| | |
| | | alt="" |
| | | style="width: 35px; height: 35px;" |
| | | fit="cover" |
| | | v-if="scope.row.url " |
| | | v-if="!scope.row.url" |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column label="备注" prop="remark" sortable width="100" />--> |
| | | |
| | | |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width" v-if="userId != 2"> |
| | | <template slot-scope="scope" v-if="scope.row.roleId !== 1"> |
| | | <el-button |
| | | size="mini" |
| | |
| | | <el-table-column label="旅游名称" prop="name" sortable width="200px" /> |
| | | <el-table-column label="去向" prop="destination" sortable width="150px" /> |
| | | <el-table-column label="旅游性质" prop="property" sortable width="100" /> |
| | | <el-table-column label="感言" prop="spee" sortable width="120px" /> |
| | | <el-table-column label="旅游方式" prop="manner" sortable width="100" /> |
| | | <el-table-column label="总金额" prop="totalPrice" sortable width="100" /> |
| | | <el-table-column label="餐费" prop="eatTotal" sortable width="70px" /> |
| | |
| | | <el-table-column label="团费" prop="groupTotal" sortable width="70px" /> |
| | | |
| | | |
| | | <el-table-column label="操作" align="center" sortable width="180" > |
| | | |
| | | <el-table-column label="操作" align="center" sortable width="180" v-if="userId != 2"> |
| | | <template slot-scope="scope" v-if="scope.row.roleId !== 1"> |
| | | <el-button |
| | | size="mini" |
| | |
| | | <el-table-column label="门票" prop="entrance" sortable :show-overflow-tooltip="true" width="100px" /> |
| | | <el-table-column label="购物" prop="shopping" sortable :show-overflow-tooltip="true" width="100px" /> |
| | | |
| | | <el-table-column label="操作" align="center" sortable class-name="small-padding fixed-width"> |
| | | <el-table-column label="操作" align="center" sortable class-name="small-padding fixed-width" v-if="userId != 2"> |
| | | <template slot-scope="scope" v-if="scope.row.roleId !== 1"> |
| | | |
| | | <el-button |
| | |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="起始时间" prop="startTime"> |
| | | <el-date-picker v-model="formDat.startTime" type="date" placeholder="请选择日期" |
| | | :editable="false" :clearable="false" :style="{width: '100%'}" value-format="yyyy-MM-dd" |
| | | <el-date-picker v-model="formDat4.startTime" type="date" placeholder="请选择日期" |
| | | value-format="yyyy-MM-dd" :style="{width: '100%'}" |
| | | ></el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="结束时间" prop="endTime"> |
| | | <el-date-picker v-model="formDat.endTime" type="date" placeholder="请选择日期" |
| | | :editable="false" :clearable="false" :style="{width: '100%'}" value-format="yyyy-MM-dd" |
| | | <el-form-item label="结束时间1" prop="endTime"> |
| | | <el-date-picker v-model="formDat4.endTime" type="date" placeholder="请选择日期" |
| | | :style="{width: '100%'}" value-format="yyyy-MM-dd" |
| | | ></el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="去向" prop="destination"> |
| | |
| | | <el-input v-model="formDat4.manner" placeholder="请输入旅游方式" style="width: 80%;"></el-input> |
| | | |
| | | </el-form-item> |
| | | <el-form-item label="感言" prop="spee"> |
| | | <textarea type="textarea" v-model="formDat4.spee" placeholder="请输入旅游感言" style="width: 80%;"></textarea> |
| | | |
| | | </el-form-item> |
| | | </el-form> |
| | | <h4 class="form-header"> </h4> |
| | | |
| | |
| | | <el-input v-model="formDat.travelMode" placeholder="请输入出行方式" clearable :style="{width: '100%'}" > |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="持证旅游" prop="certificate"> |
| | | <el-select v-model="formDat.certificate" placeholder="请选择证件" clearable :style="{width: '80%'}" > |
| | | <el-form-item label="持证旅游" prop="document"> |
| | | <el-select v-model="formDat.document" placeholder="请选择证件" clearable :style="{width: '80%'}" > |
| | | <el-option label="居民身份证" value="居民身份证"></el-option> |
| | | <el-option label="临时身份证" value="临时身份证"></el-option> |
| | | <el-option label="户口本" value="户口本"></el-option> |
| | |
| | | <el-form-item label="车次/航班" prop="flight"> |
| | | <el-input v-model="formDat.flight" placeholder="请输入车次/航班" clearable :style="{width: '100%'}" ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="其它费用" prop="otherCost"> |
| | | <el-input v-model="formDat.otherCost" type="number" placeholder="请输入备注" clearable :style="{width: '100%'}" ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="备注" prop="backInfo"> |
| | | <el-input v-model="formDat.backInfo" placeholder="请输入备注" clearable :style="{width: '100%'}" ></el-input> |
| | | </el-form-item> |
| | | <!-- <el-form-item label="备注" prop="remark">--> |
| | | <!-- <el-input v-model="formDat.remark" placeholder="请输入备注" clearable :style="{width: '100%'}" ></el-input>--> |
| | | <!-- </el-form-item>--> |
| | |
| | | <el-upload |
| | | action="#" |
| | | list-type="picture-card" |
| | | multiple |
| | | :http-request="requestUpload" |
| | | :file-list="fileList" |
| | | multiple |
| | | :http-request="requestUpload" |
| | | :file-list="fileList" |
| | | :on-change="handleChange" |
| | | :auto-upload="false" |
| | | > |
| | | <i slot="default" class="el-icon-plus"></i> |
| | | <div slot="file" slot-scope="{file}"> |
| | |
| | | |
| | | </div> |
| | | </el-upload> |
| | | <el-button |
| | | style="margin-left: 10px" |
| | | size="small" |
| | | type="success" |
| | | |
| | | @click="picUpload" |
| | | >上传到服务器</el-button> |
| | | <h4 class="form-header">其他附件 </h4> |
| | | <el-upload |
| | | action="" |
| | |
| | | multiple |
| | | |
| | | :on-remove="handleRemove" |
| | | :http-request="requestUpload" |
| | | :show-file-list="true" |
| | | > |
| | | <el-button type="primary">上传</el-button> |
| | | <template #tip> |
| | | <div class="el-upload__tip"> |
| | | </div> |
| | | </template> |
| | | </el-upload> |
| | | |
| | | |
| | | ref="upload1" |
| | | :on-change="handleChange1" |
| | | :auto-upload="false" |
| | | list-type="picture-card" |
| | | :http-request="requestUpload1" |
| | | |
| | | > |
| | | |
| | | <i slot="default" class="el-icon-plus"></i> |
| | | <div slot="file" slot-scope="{file}"> |
| | | <!-- 添加video元素用于显示视频 --> |
| | | <video |
| | | v-if="file.url.includes('.mp4')" |
| | | class="el-upload-list__item-thumbnail" |
| | | :src="file.url" |
| | | style="width: 147px; height: 147px" |
| | | fit="cover" |
| | | ></video> |
| | | <img v-else |
| | | class="el-upload-list__item-thumbnail" |
| | | src="../../assets/images/deviceLis.png" |
| | | alt="" |
| | | style="width: 100%; height: 100%" |
| | | fit="cover"></img> |
| | | |
| | | <span class="el-upload-list__item-actions"> |
| | | <span class="el-upload-list__item-name">{{ file.name }}</span> |
| | | <span |
| | | class="el-upload-list__item-preview" |
| | | @click="handleFileCardPreview(file)" |
| | | > |
| | | <i class="el-icon-zoom-in"></i> |
| | | </span> |
| | | |
| | | <span |
| | | |
| | | class="el-upload-list__item-delete" |
| | | @click="handleRemoveFile(file)" |
| | | > |
| | | <i class="el-icon-delete"></i> |
| | | </span> |
| | | </span> |
| | | |
| | | </div> |
| | | |
| | | </el-upload> |
| | | <el-button |
| | | style="margin-left: 10px" |
| | | size="small" |
| | | type="success" |
| | | @click="fileUpload" |
| | | >上传到服务器</el-button> |
| | | </el-form> |
| | | <h4 class="form-header"> </h4> |
| | | </el-form> |
| | | <el-form ref="elForm" :model="formDat" :rules="rules1" size="medium" label-width="100px"> |
| | | <h4 class="form-header">费用明细 </h4> |
| | |
| | | <script> |
| | | import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus, deptTreeSelect } from "@/api/system/role"; |
| | | import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu"; |
| | | |
| | | import {getInfo} from "@/api/login"; |
| | | |
| | | |
| | | //在system/note/index.js中导入接口函数 --接好了 |
| | |
| | | dicts: ['sys_normal_disable'], |
| | | data() { |
| | | return { |
| | | userId: undefined, |
| | | // 遮罩层 |
| | | disabled: false, |
| | | loading: true, |
| | |
| | | // 日期范围 |
| | | dateRange: [], |
| | | // 数据范围选项 |
| | | fot:[".jpg",".jif"], |
| | | // 数据范围选项 |
| | | fot:['.bmp','.jpg','.jpeg','.png','.tif','.gif','.pcx','.tga','.exif','.fpx', |
| | | '.svg','.psd','.cdr','.pcd','.dxf','.ufo','.eps','.ai','.aw','.WMF','.webp','.apng'], |
| | | |
| | | fileList:[ |
| | | ], |
| | | fileListOther:[ |
| | | |
| | | ], |
| | | fileList1:[], |
| | | uploadFileList: [], |
| | | uploadFileList1: [], |
| | | fileListOther:[], |
| | | dsb:true, |
| | | btn:false, |
| | | formDat: { |
| | |
| | | happenTime: undefined, |
| | | title: undefined, |
| | | travelPeriod:undefined, |
| | | certificate: undefined, |
| | | document: undefined, |
| | | totalPrice: undefined, |
| | | self: undefined, |
| | | remark: undefined, |
| | | groupTotal:undefined, |
| | | url: undefined, |
| | | url: "", |
| | | otherCost: undefined, |
| | | backInfo: undefined |
| | | }, |
| | | formDat1: { |
| | | eat: undefined, |
| | |
| | | property:undefined, |
| | | name: undefined, |
| | | destination: undefined, |
| | | spee: undefined |
| | | }, |
| | | // 菜单列表 |
| | | menuOptions: [], |
| | |
| | | destination: [{ |
| | | required: true, |
| | | message: '请选择去向', |
| | | trigger: 'change' |
| | | trigger: 'blur' |
| | | }], |
| | | property: [{ |
| | | required: true, |
| | |
| | | }], |
| | | startTime: [{ |
| | | required: true, |
| | | type: "string", |
| | | message: '请选择日期', |
| | | trigger: 'change' |
| | | trigger: 'blur' |
| | | }], |
| | | endTime: [{ |
| | | required: true, |
| | | message: '请选择日期', |
| | | trigger: 'change' |
| | | trigger: 'blur' |
| | | }], |
| | | name: [{ |
| | | required: true, |
| | |
| | | }, |
| | | created() { |
| | | this.getList(); |
| | | this.getInfo() |
| | | }, |
| | | methods: { |
| | | getInfo(){ |
| | | console.log('-----------------') |
| | | getInfo().then(response=>{ |
| | | console.log(response.user.roles[0].roleId,'roleID') |
| | | this.userId = response.user.roles[0].roleId |
| | | }) |
| | | }, |
| | | //展开行 |
| | | expandRowClassName({ row, rowIndex }) { |
| | | // 返回对应行的样式配置对象 |
| | |
| | | |
| | | listTravelPrice(this.queryParams).then(response => { |
| | | this.travelpriceList = response.data.data; |
| | | |
| | | //alert(this.travelpriceList.url) |
| | | console.log("0000") |
| | | console.log(this.travelpriceList,'1111111111111111111111111') |
| | | this.total = response.data.total; |
| | | this.loading = false; |
| | | |
| | |
| | | const promises = []; |
| | | for (const item of this.travelpriceList) { |
| | | const promise = listTravelBase({ cid: item.id }).then(result => { |
| | | console.log(result.data) |
| | | travelBaseMap[item.id] = result.data; |
| | | }); |
| | | promises.push(promise); |
| | |
| | | deptCheckStrictly: true, |
| | | remark: undefined |
| | | }; |
| | | this.resetForm("form"); |
| | | this.resetForm("elForm"); |
| | | }, |
| | | /** 搜索按钮操作 */ |
| | | handleQuery() { |
| | |
| | | const id = this.row.id |
| | | |
| | | this.formDat.cid = id; |
| | | let ul = this.fileList.map(function (elem){ |
| | | return elem.url.replace(process.env.VUE_APP_BASE_TRUE_API,"") |
| | | }).join(",") |
| | | let uls = this.fileListOther.map(function (elem){ |
| | | return elem.url.replace(process.env.VUE_APP_BASE_TRUE_API,"") |
| | | }).join(",") |
| | | this.formDat.url = ul+","+uls |
| | | // let ul = this.fileList.map(function (elem){ |
| | | // return elem.url.replace(process.env.VUE_APP_BASE_TRUE_API,"") |
| | | // }).join(",") |
| | | // let uls = this.fileListOther.map(function (elem){ |
| | | // return elem.url.replace(process.env.VUE_APP_BASE_TRUE_API,"") |
| | | // }).join(",") |
| | | // this.formDat.url = ul+","+uls |
| | | console.log(this.formDat) |
| | | this.$refs["elForm"].validate(valid => { |
| | | if (valid) { |
| | |
| | | addTravelBase(this.formDat).then(response => { |
| | | this.$modal.msgSuccess("新增成功"); |
| | | this.centerDialogVisible = false; |
| | | this.open = false; |
| | | // 清空formDat对象的数据 |
| | | Object.keys(this.formDat).forEach(key => { |
| | | this.formDat[key] = ''; |
| | | }); |
| | | for(let i = 0; i <= this.fileList.length; i++) |
| | | { |
| | | this.handleRemove(this.fileList[0]); |
| | | } |
| | | for(let i = 0; i < this.fileListOther.length; i++){ |
| | | this.handleRemoveFile(this.fileListOther[0]); |
| | | } |
| | | this.getList(); |
| | | |
| | | |
| | | }); |
| | | } |
| | | }); |
| | | // Object.keys(this.formDat).forEach(key => { |
| | | // this.formDat[key] = ''; |
| | | // }); |
| | | // this.handleRemove(this.fileList[0]); |
| | | // this.handleRemoveFile(this.fileListOther[0]); |
| | | // 清空formDat对象的数据 |
| | | Object.keys(this.formDat).forEach(key => { |
| | | this.formDat[key] = ''; |
| | | }); |
| | | this.handleRemove(this.fileList[0]); |
| | | this.handleRemoveFile(this.fileListOther[0]); |
| | | for(let i = 0; i <= this.fileList.length; i++) |
| | | { |
| | | this.handleRemove(this.fileList[0]); |
| | | } |
| | | for(let i = 0; i < this.fileListOther.length; i++){ |
| | | this.handleRemoveFile(this.fileListOther[0]); |
| | | } |
| | | }, |
| | | // 弹窗 |
| | | handleShow(row){ |
| | |
| | | }); |
| | | }, |
| | | |
| | | |
| | | handleRemove(file) { |
| | | //alert(98) |
| | | //alert(this.fileList.length) |
| | | for(let i = 0; i < this.fileList.length; i++) |
| | | { |
| | | if(this.fileList[i].url==file.url) |
| | | { |
| | | this.$delete(this.fileList,i); |
| | | this.$delete(this.uploadFileList,i); |
| | | } |
| | | } |
| | | // let ul = this.fileList.map(function (elem){ |
| | | // return elem.url.replace(process.env.VUE_APP_BASE_TRUE_API,"") |
| | | // }).join(",") |
| | | // alert(this.fileListOther.length) |
| | | // let uls = this.fileListOther.map(function (elem){ |
| | | // return elem.url.replace(process.env.VUE_APP_BASE_TRUE_API,"") |
| | | // }).join(",") |
| | | // this.formDat.url = ul+","+uls; |
| | | }, |
| | | handleRemoveFile(file) { |
| | | for(let i = 0; i < this.fileListOther.length; i++) |
| | | { |
| | | if(this.fileListOther[i].url==file.url) |
| | | { |
| | | this.$delete(this.fileListOther,i); |
| | | this.$delete(this.uploadFileList1,i); |
| | | } |
| | | } |
| | | }, |
| | | handlePictureCardPreview(file) { |
| | | //alert(123) |
| | | this.dialogImageUrl = file.url; |
| | | this.dialogVisible = true; |
| | | }, |
| | | |
| | | /** 提交按钮(数据权限) */ |
| | | submitDataScope: function() { |
| | | |
| | |
| | | this.handleRemove(this.fileList[0]); |
| | | this.handleRemoveFile(this.fileListOther[0]); |
| | | }, |
| | | requestUpload(params) |
| | | { |
| | | var file = params.file; |
| | | var formData = new FormData(); |
| | | formData.append('uploadFile', file); |
| | | let _this = this |
| | | handleChange(file, fileList1) { |
| | | //定义一个全局数组uploadFileList来做存储 |
| | | |
| | | uploadPic(formData).then(response => { |
| | | let pth = response.data.originalFilename.substr(response.data.originalFilename.length-4, response.data.originalFilename.length) |
| | | // this.uploadFileList.push(file.raw); |
| | | console.log("=========5555=========") |
| | | console.log(file) |
| | | // console.log(this.uploadFileList) |
| | | // this.fileList = fileList |
| | | //alert(file) |
| | | this.uploadFileList.push(file.raw); |
| | | this.fileList.push({name:file.name,url:file.url}) |
| | | //alert(fileList1.length) |
| | | }, |
| | | handleChange1(file, fileOtherList1) { |
| | | //定义一个全局数组uploadFileList来做存储 |
| | | this.uploadFileList1.push(file.raw); |
| | | this.fileListOther.push({name:file.name,url:file.url}) |
| | | // this.uploadFileList.push(file.raw); |
| | | console.log("=========5555=========") |
| | | //console.log(file) |
| | | // console.log(this.uploadFileList) |
| | | // this.fileList = fileList |
| | | }, |
| | | fileUpload(){ |
| | | // var file = params.file; |
| | | |
| | | if(_this.fot.includes(pth) === true) |
| | | { |
| | | _this.fileList.push({name:response.data.fileName, "url":response.data.url}) |
| | | var formData = new FormData(); |
| | | this.$refs.upload1.submit(); |
| | | // formData.append('uploadFile', file); |
| | | if(this.uploadFileList1.length==0){ |
| | | this.$modal.msgSuccess("文档上传列表不能为空!"); |
| | | return |
| | | } |
| | | this.uploadFileList1.forEach((elem)=>{ |
| | | formData.append("files", elem) |
| | | |
| | | } |
| | | }) |
| | | |
| | | else{ |
| | | _this.fileListOther.push({name:response.data.fileName, url:response.data.url}) |
| | | let _this = this |
| | | |
| | | } |
| | | }) |
| | | this.uploading = true; |
| | | uploadPic(formData).then(response => { |
| | | _this.uploadFileList1 = [] |
| | | _this.formDat.url = _this.formDat.url+","+response.fileNames |
| | | alert(_this.formDat.url) |
| | | _this.$modal.msgSuccess("文件上传成功!"); |
| | | }) |
| | | |
| | | }, |
| | | }, |
| | | picUpload() |
| | | { |
| | | var formData = new FormData(); |
| | | //alert(976) |
| | | //this.$refs.upload.submit(); |
| | | //alert(8) |
| | | //alert(this.uploadFileList.length) |
| | | if(this.uploadFileList.length==0){ |
| | | this.$modal.msgSuccess("图片上传列表不能为空!"); |
| | | return} |
| | | //console.log(this.uploadFileList) |
| | | this.uploadFileList.forEach((elem)=>{ |
| | | formData.append("files", elem) |
| | | |
| | | }) |
| | | //alert(90) |
| | | let _this = this |
| | | //alert(9) |
| | | uploadPic(formData).then(response => { |
| | | // alert("dds") |
| | | _this.formDat.url = _this.formDat.url+","+response.fileNames |
| | | // alert(_this.formDat.url) |
| | | _this.uploadFileList = [] |
| | | _this.$modal.msgSuccess("图片上传成功"); |
| | | |
| | | }); |
| | | }, |
| | | requestUpload(params) { |
| | | //alert(98) |
| | | // this.uploadFileList.push(params.file); |
| | | }, |
| | | |
| | | /** 删除按钮操作 */ |
| | | handleDelete(row) { |
| | | const Ids = row.id || this.ids; |