Procházet zdrojové kódy

Merge branch 'master' of http://132.232.92.186:3000/XinXiBu/oa-system

yuanrf před 6 měsíci
rodič
revize
4eb9fe78a5

+ 266 - 189
src/components/EvaluationForm.vue

@@ -1,204 +1,281 @@
 <template>
-    <div class="ml_sign">
-        <canvas ref="signature" id="signature"></canvas>
-        <div class="btn-wrapper">
-          <button @click="clear">取消</button>
-          <button @click="save">保存</button>
+    <div class="ml_sign-all">
+        <div class="ml_sign-form">
+            <el-form :model="signinfo" :rules="signrules" ref="signinfo" label-width="80px" class="demo-ruleForm">
+                <el-form-item label="团队:" prop="tname">
+                    <el-input size="small" v-model="signinfo.tname"></el-input>
+                </el-form-item>
+                <el-form-item label="人数:" prop="tname">
+                    <el-input size="small" v-model="signinfo.tname"></el-input>
+                </el-form-item>
+                <!-- <el-form-item label="领队:" prop="tname">
+                    <el-input size="small" v-model="signinfo.tname"></el-input>
+                </el-form-item>
+                <el-form-item label="导游:" prop="tname">
+                    <el-input size="small" v-model="signinfo.tname"></el-input>
+                </el-form-item>
+                <el-form-item label="行程:" prop="tname">
+                    <el-input size="small" v-model="signinfo.tname"></el-input>
+                </el-form-item>
+                <el-form-item label="天数:" prop="tname">
+                    <el-input size="small" v-model="signinfo.tname"></el-input>
+                </el-form-item> -->
+            </el-form>
+        </div>
+        <div class="ml_sign">
+            <canvas ref="signature" id="signature"></canvas>
+            <div class="btn-wrapper">
+              <button @click="clear">取消</button>
+              <button @click="save">保存</button>
+            </div>
+            <img :src="imgurl">
         </div>
-        <img :src="imgurl">
     </div>
   </template>
   
-  <script>
-  export default {
+<script>
+export default {
     name: 'Signatrue',
-    data () {
-      return {
-        canvas: null, // 存储canvas节点
-        ctx: null, // 存储canvas的context上下文
-        config: {
-          width: 400, // 宽度
-          height: 200, // 高度
-          strokeStyle: 'red', // 线条颜色
-          lineWidth: 4, // 线条宽度
-          lineCap: 'round', // 设置线条两端圆角
-          lineJoin: 'round' // 线条交汇处圆角
-        },
-        points: [], // 记录坐标 用来判断是否有签名的
-        client: {
-          offsetX: 0, // 偏移量
-          offsetY: 0,
-          endX: 0, // 坐标
-          endY: 0
-        },
-        imgurl: ''
-      }
+    data() {
+        return {
+            signinfo:{
+                tname:'',
+            },
+            signrules:{
+                tname: [
+                    { required: true, message: '请输入活动名称', trigger: 'blur' },
+                    { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
+                ],
+            },
+            canvas: null, // 存储canvas节点
+            ctx: null, // 存储canvas的context上下文
+            config: {
+                width: 350, // 宽度
+                height: 200, // 高度
+                strokeStyle: 'red', // 线条颜色
+                lineWidth: 4, // 线条宽度
+                lineCap: 'round', // 设置线条两端圆角
+                lineJoin: 'round' // 线条交汇处圆角
+            },
+            points: [], // 记录坐标 用来判断是否有签名的
+            client: {
+                offsetX: 0, // 偏移量
+                offsetY: 0,
+                endX: 0, // 坐标
+                endY: 0
+            },
+            imgurl: ''
+        }
     },
     computed: {
-      // 判断是否为移动端
-      mobileStatus () {
-        return (/Mobile|Android|iPhone/i.test(navigator.userAgent))
-      }
+        // 判断是否为移动端
+        mobileStatus() {
+            return (/Mobile|Android|iPhone/i.test(navigator.userAgent))
+        }
     },
-    mounted () {
-      this.init()
+    mounted() {
+        this.init()
     },
     methods: {
-      // 初始化
-      init () {
-        const canvas = this.$refs.signature
-        canvas.width = this.config.width // 设置canvas的宽
-        canvas.height = this.config.height // 设置canvas的高
-        // 设置一个边框
-        canvas.style.border = '1px solid #000'
-  
-        // 存储canvas节点
-        this.canvas = canvas
-        // 创建context对象
-        this.ctx = canvas.getContext('2d')
-  
-        // 设置相应配置
-        this.ctx.fillStyle = 'transparent'
-        this.ctx.lineWidth = this.config.lineWidth
-        this.ctx.strokeStyle = this.config.strokeStyle
-        this.ctx.lineCap = this.config.lineCap
-        this.ctx.lineJoin = this.config.lineJoin
-  
-        // 绘制填充矩形
-        this.ctx.fillRect(
-          0, // x 轴起始绘制位置
-          0, // y 轴起始绘制位置
-          this.config.width, // 宽度
-          this.config.height // 高度
-        )
-  
-        // 创建鼠标/手势按下监听器
-        canvas.addEventListener(this.mobileStatus ? 'touchstart' : 'mousedown', this.startDraw)
-        // 创建鼠标/手势 弹起/离开 监听器
-        canvas.addEventListener(this.mobileStatus ? 'touchend' : 'mouseup', this.cloaseDraw)
-      },
-      // 开始绘制
-      startDraw (event) {
-        // 获取偏移量及坐标
-        const { offsetX, offsetY, pageX, pageY } = this.mobileStatus ? event.changedTouches[0] : event
-  
-        // 修改上次的偏移量及坐标
-        this.client.offsetX = offsetX
-        this.client.offsetY = offsetY
-        this.client.endX = pageX
-        this.client.endY = pageY
-  
-        // 清除以上一次 beginPath 之后的所有路径,进行绘制
-        this.ctx.beginPath()
-        // 设置画线起始点位
-        this.ctx.moveTo(this.client.endX, this.client.endY)
-        // 监听 鼠标移动或手势移动
-        this.canvas.addEventListener(this.mobileStatus ? 'touchmove' : 'mousemove', this.draw)
-      },
-      // 绘制
-      draw (event) {
-        // 获取当前坐标点位
-        const { pageX, pageY } = this.mobileStatus ? event.changedTouches[0] : event
-        // 修改最后一次绘制的坐标点
-        this.client.endX = pageX
-        this.client.endY = pageY
-        const obj = {
-          x: pageX,
-          y: pageY
-        }
-  
-        // 根据坐标点位移动添加线条
-        this.ctx.lineTo(pageX, pageY)
-  
+        // 初始化
+        init() {
+            const canvas = this.$refs.signature
+            canvas.width = this.config.width // 设置canvas的宽
+            canvas.height = this.config.height // 设置canvas的高
+            // 设置一个边框
+            canvas.style.border = '1px solid #000'
+
+            // 存储canvas节点
+            this.canvas = canvas
+            // 创建context对象
+            this.ctx = canvas.getContext('2d')
+            console.log(this.ctx);
+            
+            // 设置相应配置
+            this.ctx.fillStyle = 'transparent'
+            this.ctx.lineWidth = this.config.lineWidth
+            this.ctx.strokeStyle = this.config.strokeStyle
+            this.ctx.lineCap = this.config.lineCap
+            this.ctx.lineJoin = this.config.lineJoin
+
+            // 绘制填充矩形
+            this.ctx.fillRect(
+                0, // x 轴起始绘制位置
+                0, // y 轴起始绘制位置
+                this.config.width, // 宽度
+                this.config.height // 高度
+            )
+
+            
+            // 创建鼠标/手势按下监听器
+            canvas.addEventListener(this.mobileStatus ? 'touchstart' : 'mousedown', this.startDraw)
+            // 创建鼠标/手势 弹起/离开 监听器
+            canvas.addEventListener(this.mobileStatus ? 'touchend' : 'mouseup', this.cloaseDraw)
+        },
+        // 开始绘制
+        startDraw(event) {
+            // 获取偏移量及坐标
+            const { clientX, clientY, pageX, pageY } = this.mobileStatus ? event.changedTouches[0] : event
+            const rect = this.$refs.signature.getBoundingClientRect();
+            console.log(event);
+            
+            // 修改上次的偏移量及坐标
+            this.client.offsetX = clientX-rect.left
+            this.client.offsetY = clientY-rect.top
+            this.client.endX = pageX-rect.left
+            this.client.endY = pageY-rect.top
+            console.log(this.client.offsetX,this.client.offsetY,this.client.endX,this.client.endY);
+            
+
+            // 清除以上一次 beginPath 之后的所有路径,进行绘制
+            this.ctx.beginPath()
+            // 设置画线起始点位
+            this.ctx.moveTo(this.client.endX, this.client.endY)
+            // 监听 鼠标移动或手势移动
+            this.canvas.addEventListener(this.mobileStatus ? 'touchmove' : 'mousemove', this.draw)
+        },
         // 绘制
-        this.ctx.stroke()
-  
-        // 记录坐标
-        this.points.push(obj)
-      },
-      // 结束绘制
-      cloaseDraw () {
+        draw(event) {
+            // 获取当前坐标点位
+            const { pageX, pageY } = this.mobileStatus ? event.changedTouches[0] : event
+            const rect = this.$refs.signature.getBoundingClientRect();
+            // 修改最后一次绘制的坐标点
+            this.client.endX = pageX-rect.left
+            this.client.endY = pageY-rect.top
+            const obj = {
+                x: pageX,
+                y: pageY
+            }
+
+            console.log(obj);
+            
+            // 根据坐标点位移动添加线条
+            this.ctx.lineTo(pageX, pageY)
+
+            // 绘制
+            this.ctx.stroke()
+
+            // 记录坐标
+            this.points.push(obj)
+        },
         // 结束绘制
-        this.ctx.closePath()
-        // 移除鼠标移动或手势移动监听器
-        this.canvas.removeEventListener('mousemove', this.draw)
-      },
-      // 取消/清空画布
-      clear () {
-        // 清空当前画布上的所有绘制内容
-        this.ctx.clearRect(0, 0, this.config.width, this.config.height)
-        // 清空坐标
-        this.points = []
-      },
-      // 保存
-      save () {
-        // 判断至少有20个坐标 才算有签名
-        if (this.points.length < 20) {
-          alert('签名不能为空!')
-          return
-        }
-  
-        // 操作事件
-        const baseFile = this.canvas.toDataURL() // 转成base64,默认转成png格式的图片编码
-        const filename = `${Date.now()}.png` // 文件名字
-        const file = this.dataURLToFile(baseFile, filename) // 图片文件形式 传给后端存储即可
-  
-        this.uploadSignatrue(file)
-  
-        // this.dataUrlToPng()
-  
-        // this.dataToImg()
-      },
-      // img显示签名
-      dataToImg () {
-        // 转成base64
-        const baseFile = this.canvas.toDataURL() // 默认转成png格式的图片编码
-        this.imgurl = baseFile
-      },
-      // 将签名生成png图片
-      dataUrlToPng () {
-        // 将canvas上的内容转成blob流
-        this.canvas.toBlob(blob => {
-          // 获取当前时间并转成字符串,用来当做文件名
-          const date = Date.now().toString()
-          // 创建一个 a 标签
-          const a = document.createElement('a')
-          // 设置 a 标签的下载文件名
-          a.download = `${date}.png`
-          // 设置 a 标签的跳转路径为 文件流地址
-          a.href = URL.createObjectURL(blob)
-          // 手动触发 a 标签的点击事件
-          a.click()
-          // 移除 a 标签
-          a.remove()
-        })
-      },
-      // 将base64转成File文件对象
-      dataURLToFile (dataURL, filename) {
-        const arr = dataURL.split(',')
-        // 获取图片格式
-        const imgType = arr[0].match(/:(.*?);/)[1]
-        // atob() 方法用于解码使用 base-64 编码的字符串
-        const dec = atob(arr[1])
-        let n = dec.length
-        const u8arr = new Uint8Array(n)
-        while (n--) {
-          // 转成ASCII码
-          u8arr[n] = dec.charCodeAt(n)
+        cloaseDraw() {
+            // 结束绘制
+            this.ctx.closePath()
+            // 移除鼠标移动或手势移动监听器
+            this.canvas.removeEventListener('mousemove', this.draw)
+        },
+        // 取消/清空画布
+        clear() {
+            // 清空当前画布上的所有绘制内容
+            this.ctx.clearRect(0, 0, this.config.width, this.config.height)
+            // 清空坐标
+            this.points = []
+        },
+        // 保存
+        save() {
+            // 判断至少有20个坐标 才算有签名
+            if (this.points.length < 20) {
+                alert('签名不能为空!')
+                return
+            }
+
+            // 操作事件
+            const baseFile = this.canvas.toDataURL() // 转成base64,默认转成png格式的图片编码
+            const filename = `${Date.now()}.png` // 文件名字
+            const file = this.dataURLToFile(baseFile, filename) // 图片文件形式 传给后端存储即可
+
+            this.uploadSignatrue(file)
+
+            // this.dataUrlToPng()
+
+            // this.dataToImg()
+        },
+        // img显示签名
+        dataToImg() {
+            // 转成base64
+            const baseFile = this.canvas.toDataURL() // 默认转成png格式的图片编码
+            this.imgurl = baseFile
+        },
+        // 将签名生成png图片
+        dataUrlToPng() {
+            // 将canvas上的内容转成blob流
+            this.canvas.toBlob(blob => {
+                // 获取当前时间并转成字符串,用来当做文件名
+                const date = Date.now().toString()
+                // 创建一个 a 标签
+                const a = document.createElement('a')
+                // 设置 a 标签的下载文件名
+                a.download = `${date}.png`
+                // 设置 a 标签的跳转路径为 文件流地址
+                a.href = URL.createObjectURL(blob)
+                // 手动触发 a 标签的点击事件
+                a.click()
+                // 移除 a 标签
+                a.remove()
+            })
+        },
+        // 将base64转成File文件对象
+        dataURLToFile(dataURL, filename) {
+            const arr = dataURL.split(',')
+            // 获取图片格式
+            const imgType = arr[0].match(/:(.*?);/)[1]
+            // atob() 方法用于解码使用 base-64 编码的字符串
+            const dec = atob(arr[1])
+            let n = dec.length
+            const u8arr = new Uint8Array(n)
+            while (n--) {
+                // 转成ASCII码
+                u8arr[n] = dec.charCodeAt(n)
+            }
+            return new File([u8arr], filename, { type: imgType })
+        },
+        // 上传签名
+        uploadSignatrue(file) {
+            const formData = new FormData()
+            formData.append('file', file)
+            // formData.append('paramsOne', paramsOne)
+            // ...
+            console.log(formData)
+
+            // 上传接口 这里就不赘述了
+            // uploadFile(params, ...)
         }
-        return new File([u8arr], filename, { type: imgType })
-      },
-      // 上传签名
-      uploadSignatrue (file) {
-        const formData = new FormData()
-        formData.append('file', file)
-        // formData.append('paramsOne', paramsOne)
-        // ...
-        console.log(formData)
-  
-        // 上传接口 这里就不赘述了
-        // uploadFile(params, ...)
-      }
     }
-  }
-  </script>
+}
+</script>
+<style>
+*{
+    padding: 0;
+    margin: 0;
+}
+.ml_sign-all{
+    padding: 10px;
+}
+.ml_sign-form .el-form-item{
+    width: 350px;
+    margin-bottom: 10px;
+}
+.ml_sign-form .el-form-item__error{
+    top: 85%;
+}
+.ml_sign-form .el-form-item__label {
+    position: relative; /* 设置相对定位作为星号的定位基准 */
+    text-align: justify;
+    text-align-last: justify; /* 确保最后一行也两端对齐 */
+    padding-left: 10px; /* 为星号预留空间 */
+}
+
+.ml_sign-form .el-form-item__label:before {
+    content: '*';
+    color: red;
+    position: absolute;
+    left: 0; /* 星号定位到标签最左侧 */
+    top: 0; /* 调整垂直位置以适应行高 */
+}
+.ml_sign-form .el-form{
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: space-between;
+}
+</style>

+ 2 - 5
src/components/Finance/DailyFeePayment.vue

@@ -60,7 +60,7 @@
                 </div>
                 <div class="feeType-box">
                     <label>申请人: </label>
-                    <el-select :disabled="sqrpd" @change="downtrigger()" v-model="userNameValue" filterable placeholder="请选择申请人">
+                    <el-select @change="downtrigger()" v-model="userNameValue" filterable placeholder="请选择申请人">
                         <el-option
                         v-for="item in userNameData"
                         :key="item.id"
@@ -227,10 +227,7 @@ export default {
             ],
             feeTypValue:-1,
             userNameData:[
-                {
-                    cnName: "全部",
-                    id:-1
-                }
+                
             ],
             userNameValue:'',
             isPaySign:"-1",//是否付款

+ 0 - 1
src/components/Finance/FeesPage.vue

@@ -290,7 +290,6 @@ export default {
         },
         //多选审批
         PostAuditGrpCreditCardPayment(val) {
-            console.log(that.auditarr);
             var url = "/api/Groups/PostAuditGrpCreditCardPayment"
             var that = this
             this.$axios({

+ 7 - 4
src/components/Finance/LncomingBills.vue

@@ -33,7 +33,7 @@
                 </div>
                 <div class="lncomingbill-info-li">
                     <label>起止日期:</label>
-                    <span>{{ groupInfo.tontractTime | filter_time }}~{{ groupInfo.visitDate | filter_time }}</span>
+                    <span>{{ filter_time(groupInfo.visitStartDate)}}~{{ filter_time(groupInfo.visitEndDate) }}</span>
                 </div>
                 <div class="lncomingbill-info-li">
                     <label>天数/人数:</label>
@@ -165,6 +165,11 @@ export default {
         }
     },
     methods: {
+        filter_time(value) {
+            if (value!=undefined) {
+                return value.split(' ')[0];
+            }
+        },
         //获取团组
         GetForeignReceivablesDataSources() {
             var url = "/api/Financial/PostGroupReceivablesDataSource"
@@ -489,9 +494,7 @@ export default {
 
     },
     filters: {
-        filter_time(value) {
-            return value;
-        },
+        
         filter_city(value) {
             return value
         }

+ 7 - 2
src/components/Finance/RvsReport.vue

@@ -22,7 +22,12 @@
                         </el-table-column>
                         <el-table-column prop="visitDate" label="出访时间" width="100">
                         </el-table-column>
-                        <el-table-column label="应收总计(应收+超支)">
+                        <el-table-column label="应收" width="150">
+                            <template slot-scope="scope">
+                                {{scope.row.frPrice+' RMB'}}
+                            </template>
+                        </el-table-column>
+                        <!-- <el-table-column label="应收总计(应收+超支)">
                             <el-table-column label="应收" width="150">
                                 <template slot-scope="scope">
                                     {{scope.row.frPrice+' RMB'}}
@@ -33,7 +38,7 @@
                                     {{scope.row.extraPrice+' RMB'}}
                                 </template>
                             </el-table-column>
-                        </el-table-column>
+                        </el-table-column> -->
                         <el-table-column label="已收总计(已收-收款退还)">
                             <el-table-column label="已收" width="150">
                                 <template slot-scope="scope">

+ 3 - 1
src/components/MCR/Marketingamount.vue

@@ -578,7 +578,9 @@ export default {
                 }
                 this.personnelname=this.personnelnamearr[0].id;
             }
-            if(this.userId!=233){
+            if(this.userId==21||this.userId==233){
+                
+            }else{
                 this.verifytf=true;
                 var idarr=[];
                 for (let x = 0; x < this.personnelnamearr.length; x++) {

+ 2 - 0
src/components/OP/Customers.vue

@@ -59,6 +59,8 @@
                     </el-table-column>
                     <el-table-column prop="isAuditGMStr" label="是否审核">
                     </el-table-column>
+                    <el-table-column prop="payName" label="支付方式">
+                    </el-table-column>
                     <!-- <el-table-column prop="attachment" label="附 件">
                         <template slot-scope="scope">
 

+ 44 - 6
src/components/OP/DecreasePayments.vue

@@ -6,17 +6,32 @@
                 <div class="communal-title">
                     <div>其他款项</div>
                 </div>
-                <div style="display: flex;">
-                    <div style="width: 90%;">
+                <div class="dphade" style="display: flex;">
+                    <div style="width: 50%;">
                         <el-select style="width:300px" v-model="DiId" placeholder="团组选择" clearable filterable @change="DecreasePaymentsChange">
                             <el-option v-for="item in delegationInfoList" :key="item.id" :label="item.teamName"
                                 :value="item.id">
                             </el-option>
                         </el-select>
                     </div>
-                    <div style="width: 10%;text-align: right;">
+                    <div style="width:50%;text-align: right;display: flex;justify-content: flex-end;">
+                        <el-upload
+                        class="upload-demo"
+                        ref="upload"
+                        action="http://132.232.92.186:8888/api/Groups/DecreasePaymentsOTAMate"
+                        :on-preview="handlePreview"
+                        :on-remove="handleRemove"
+                        :on-success="handleSuccess"
+                        :on-error="handleError"
+                        :file-list="fileList"
+                        :limit="1"
+                        :auto-upload="false">
+                        <el-button slot="trigger" size="small" type="primary"> wifi表格匹配团组</el-button>
+                        <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传</el-button>
+                        <div slot="tip" class="el-upload__tip">更换wifi表格匹配请移除后重新选择!</div>
+                        </el-upload>
                         <router-link :to="{ path: '/home/OpDecreasePayments', query: { DiId } }">
-                            <el-button type="primary" style="margin-left: 10px;">新增</el-button>
+                            <el-button size="small" type="primary" style="margin-left: 10px;">新增</el-button>
                         </router-link>
                     </div>
                 </div>
@@ -100,7 +115,8 @@ export default {
             userId: 0,
             DiId: '',
             delegationInfoList: [],
-            delegationInfo: {}
+            delegationInfo: {},
+            fileList:[],
         }
     },
     methods: {
@@ -248,7 +264,26 @@ export default {
                 this.$message.error("暂未上传附件");
             }
 
-        }
+        },
+        submitUpload() {
+            this.$refs.upload.submit();
+        },
+        handleRemove(file, fileList) {
+            console.log(file, fileList);
+        },
+        handlePreview(file) {
+            console.log(file);
+        },
+        handleSuccess(response) {
+            window.open(response.data.url)
+            this.$message({
+                message: response.msg,
+                type: 'success'
+            });
+        },
+        handleError(error) {
+            this.$message.error(error.msg);
+        },
 
     },
     filters:{
@@ -309,4 +344,7 @@ export default {
     font-weight: 600;
     color: #555;
 }
+.dphade .el-upload-list__item{
+    font-size: 12px;
+}
 </style>

+ 1 - 0
src/components/OP/EntryDetails.vue

@@ -1526,6 +1526,7 @@ export default {
         },
         //保存
         storage:debounce(function(){
+            console.log(this.currencys);
             return new Promise((resolve, reject) => {
                 //住宿费
                 this.fullscreenLoading=true

+ 1 - 1
src/components/OP/Groupedit.vue

@@ -652,7 +652,7 @@ export default {
                 this.commissionlevel( this.ruleForm.opRoyaltyLv)
             }
             if(val==770){
-                this.ruleForm.opRoyaltyLv=995
+                this.ruleForm.opRoyaltyLv=998
                 this.commissionlevel( this.ruleForm.opRoyaltyLv)
             }
         },

+ 24 - 7
src/components/OP/InvitationOfficialActivities.vue

@@ -99,8 +99,8 @@
                             <span v-else-if="isPay.row.isPay == 0">未付款</span>
                         </template>
                     </el-table-column>
-                    <el-table-column prop="attachment" label="附件" width="122">
-                    </el-table-column>
+                    <!-- <el-table-column prop="attachment" label="附件" width="122">
+                    </el-table-column> -->
                     <el-table-column label="操作">
                         <template slot-scope="scope">
                             <el-button style="margin-left: 0px;" size="mini" @click="download(scope.$index, scope.row)"
@@ -354,6 +354,7 @@ export default {
                         that.$message.error('删除失败!');
                     }
                     that.loading = false
+
                 }).catch(function (error) {
                     that.loading = false
                     that.$message.error("网络错误,请稍后重试");
@@ -366,11 +367,27 @@ export default {
             }); 
         },
         download(index, row) {
-            if (row.filePath != "") {
-                window.location.href = "http://132.232.92.186:24/Office/GrpFile/商邀相关文件/" + row.attachment
-            } else {
-                this.$message.error("暂未上传附件");
-            }
+            var that = this
+            this.$axios({
+                method: 'get',
+                url: "/api/Groups/InvitationOfficialActivitiesListDownFile/"+row.id,
+                headers: {
+                    Authorization: 'Bearer ' + this.token
+                },
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    window.open(res.data.data.url)
+                } else {
+                    that.$message.error(res.data.msg);
+                }
+            }).catch(function (error) {
+                that.$message.error("网络错误,请稍后重试");
+            });
+            // if (row.filePath != "") {
+            //     window.location.href = "http://132.232.92.186:24/Office/GrpFile/商邀相关文件/" + row.attachment
+            // } else {
+            //     this.$message.error("暂未上传附件");
+            // }
 
         }
     },

+ 29 - 6
src/components/OP/OpDecreasePayments.vue

@@ -183,7 +183,12 @@
                             </el-input>
                         </el-form-item>
                     </div>
-                    
+                    <div v-if="Switchwifi" style="width: 394px;">
+                        <el-form-item label="wifi平台OTA订单号:" prop="otaOrderNo" label-width="160px">
+                            <el-input placeholder="wifi平台OTA订单号" v-model="DecreasePaymentsData.otaOrderNo">
+                            </el-input>
+                        </el-form-item>
+                    </div>
                 </div>
                 <div style="display: flex;">
                     <div>
@@ -266,6 +271,7 @@ export default {
                 otherBankName:'',//开户行
                 otherSideNo:'',//银行卡号
                 otherSideName:'',//对方姓名
+                otaOrderNo:'',//wifi平台OTA订单号
             },
             IsAuditGM: 0,
             Decrease: {},
@@ -294,7 +300,7 @@ export default {
                     { required: true, message: '请输入数量', trigger: 'blur' }
                 ],
                 supplierContact: [
-                    { required: true, message: '请输入联系人', trigger: 'blur' }
+                    { required: true, message: '请输入', trigger: 'blur' }
                 ],
                 supplierContactNumber: [
                     { required: true, message: '请输入联系人电话', trigger: 'blur' }
@@ -306,13 +312,16 @@ export default {
                     { required: true, message: '请选择供应商地区', trigger: 'change' }
                 ],
                 supplierSocialAccount: [
-                    { required: true, message: '请输入联系人', trigger: 'blur' }
+                    { required: true, message: '请输入', trigger: 'blur' }
                 ],
                 supplierAddress: [
-                    { required: true, message: '请输入联系人', trigger: 'blur' }
+                    { required: true, message: '请输入', trigger: 'blur' }
                 ],
                 supplierEmail: [
-                    { required: true, message: '请输入联系人', trigger: 'blur' }
+                    { required: true, message: '请输入', trigger: 'blur' }
+                ],
+                otaOrderNo: [
+                    { required: true, message: '请输入', trigger: 'blur' }
                 ],
 
             },
@@ -322,9 +331,19 @@ export default {
             eventspd:true,
             fullscreenLoading:false,
             queryArr : [],
+            Switchwifi:false,
         }   
     },
-
+    watch:{
+        'DecreasePaymentsData.priceName'(newVal,oldVal){
+            if(newVal.toLowerCase().includes('wifi')){
+                // console.log(newVal.toLowerCase(),this.Switchwifi)
+                this.Switchwifi=true;
+            }else{
+                this.Switchwifi=false;
+            }
+        },
+    },
     methods: {
         //团组下拉框
         AirTicketResSelect() {
@@ -402,6 +421,7 @@ export default {
                     that.DecreasePaymentsData.otherBankName = that.Decrease.otherBankName
                     that.DecreasePaymentsData.otherSideNo = that.Decrease.otherSideNo
                     that.DecreasePaymentsData.otherSideName = that.Decrease.otherSideName
+                    that.DecreasePaymentsData.otaOrderNo = that.Decrease.otaOrderNo
                     that.IsAuditGM = that.Decrease.isAuditGM
                     if (that.Decrease.filePath != null && that.Decrease.filePath != undefined && that.Decrease.filePath != "") {
                         that.uploadFiles.push({
@@ -450,6 +470,7 @@ export default {
                             that.DecreasePaymentsData.filePath = that.projectName
                             that.DecreasePaymentsData.diId = that.DiIdSelect;
                             that.DecreasePaymentsData.createUserId = that.userId;
+                            that.DecreasePaymentsData.otaOrderNo=this.Switchwifi?that.DecreasePaymentsData.otaOrderNo:'';
                             var url = "/api/Groups/OpDecreasePayments"
                             that.$axios({
                                 method: 'post',
@@ -498,6 +519,7 @@ export default {
                                 that.DecreasePaymentsData.filePath = that.projectName
                                 that.DecreasePaymentsData.diId = that.DiIdSelect;
                                 that.DecreasePaymentsData.createUserId = that.userId;
+                                that.DecreasePaymentsData.otaOrderNo=this.Switchwifi?that.DecreasePaymentsData.otaOrderNo:'';
                                 var url = "/api/Groups/OpDecreasePayments"
                                 that.$axios({
                                     method: 'post',
@@ -595,6 +617,7 @@ export default {
                 that.DecreasePaymentsData.filePath = response.data
                 that.DecreasePaymentsData.diId = that.DiIdSelect;
                 that.DecreasePaymentsData.createUserId = that.userId;
+                that.DecreasePaymentsData.otaOrderNo=this.Switchwifi?that.DecreasePaymentsData.otaOrderNo:'';
                 var url = "/api/Groups/OpDecreasePayments"
                 that.$axios({
                     method: 'post',

+ 158 - 129
src/components/OP/OpInvitationOfficialActivities.vue

@@ -357,10 +357,20 @@
                         </el-form-item>
                     </div>
                     <div style="width: 385px;">
-                        <el-form-item label="附件:" prop="fileUrl" label-width="160px">
-                            <el-upload :file-list="uploadFiles" ref="upload" :on-success="upLoadSuccess"
-                                :on-error="upLoadError" :before-remove="beforeRemove" :on-change="onChange" :limit="1"
-                                :on-exceed="exceed" :action="uploadURL" :headers="headers" :auto-upload="false">
+                        <el-form-item style="position: relative;" label="附件:" prop="fileUrl" label-width="160px">
+                            <span style="position: absolute;top: 0;left: -50px;color: red;">*</span>
+                            <el-upload 
+                                :file-list="uploadFiles" 
+                                multiple ref="upload" 
+                                :on-success="upLoadSuccess"
+                                :on-error="upLoadError" 
+                                :on-remove="handleRemove" 
+                                :before-remove="beforeRemove" 
+                                :on-change="onChange" 
+                                :limit="10"
+                                :on-exceed="exceed" 
+                                action="" 
+                                :auto-upload="false">
                                 <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
                                 <!-- <el-button style="margin-left: 10px;" size="small" type="success"
                                     @click="submitUpload">上传到服务器</el-button> -->
@@ -395,7 +405,7 @@ export default {
     data() {
         return {
             uploadURL: "http://132.232.92.186:8888/api/Groups/UploadProject",
-            projectName: "",
+            projectName: [],
             uploadFiles: [],//上传的文件列表
             DelfileName: "",
             title: "新增商邀费用",
@@ -723,8 +733,8 @@ export default {
                     that.InvitationOfficialActivities.inviterArea = res.data.data._Invitation.inviterArea;
                     that.InvitationOfficialActivities.inviter = res.data.data._Invitation.inviter;
                     that.InvitationOfficialActivities.inviteTime = res.data.data._Invitation.inviteTime;
-                    that.InvitationOfficialActivities.attachment = res.data.data._Invitation.attachment;
-                    that.projectName = res.data.data._Invitation.attachment;
+                    that.InvitationOfficialActivities.attachment = res.data.data._Invitation.attachments;
+                    that.projectName = res.data.data._Invitation.attachments;
                     that.InvitationOfficialActivities.inviteCost = res.data.data._Invitation.inviteCost;
                     that.InvitationOfficialActivities.inviteCurrency = res.data.data._Invitation.inviteCurrency;
                     that.InvitationOfficialActivities.sendCost = res.data.data._Invitation.sendCost;
@@ -756,13 +766,15 @@ export default {
                     that.InvitationOfficialActivities.email = res.data.data._InvitationData.email;
                     that.InvitationOfficialActivities.fax = res.data.data._InvitationData.fax;
                     that.InvitationOfficialActivities.otherInformation = res.data.data._InvitationData.remark;
+                    
                     if (that.InvitationOfficialActivities.attachment != null && that.InvitationOfficialActivities.attachment != undefined && that.InvitationOfficialActivities.attachment != "") {
-                        that.uploadFiles.push({
-                            name: that.InvitationOfficialActivities.attachment,
-                            url: 'http://132.232.92.186:24/Office/GrpFile/商邀相关文件/',
-                        })
-                    }
-
+                        for (let m = 0; m < that.InvitationOfficialActivities.attachment.length; m++) {
+                            that.uploadFiles.push({
+                                name: that.InvitationOfficialActivities.attachment[m],
+                                url: 'http://132.232.92.186:24/Office/GrpFile/商邀相关文件/'+that.InvitationOfficialActivities.attachment[m],
+                            })
+                        }
+                    } 
                 }
 
             })
@@ -842,96 +854,31 @@ export default {
                 const that = this;
                 that.$refs.InvitationOfficialActivities.validate((valid) => {
                     if (valid) {
-                        if (that.InvitationOfficialActivities.attachment == that.projectName) {
-                            if (that.DelfileName != null && that.DelfileName != "" && that.DelfileName != undefined) {
-                                that.$axios({
-                                    method: 'post',
-                                    url: "/api/Groups/DelFile",
-                                    headers: {
-                                        Authorization: 'Bearer ' + that.token
-                                    },
-                                    data: {
-                                        fileName: that.DelfileName,
-                                        id: that.id
-                                    }
-                                }).then(function (res) {
-                                    if (res.data.code == 200) {
-
-                                    }
-                                })
-                            }
-                            that.InvitationOfficialActivities.attachment = that.projectName
-                            that.InvitationOfficialActivities.diId = that.DiIdSelect;
-                            that.InvitationOfficialActivities.createUserId = that.userId;
-                            var url = "/api/Groups/OpInvitationOfficialActivities"
-                            that.$axios({
-                                method: 'post',
-                                url: url,
-                                headers: {
-                                    Authorization: 'Bearer ' + that.token
-                                },
-                                data: that.InvitationOfficialActivities
-                            }).then(function (res) {
-                                if (res.data.code == 200) {
-                                    that.$message({
-                                        message: res.data.msg,
-                                        type: 'success'
-                                    });
-                                    setTimeout(() => {
-                                        that.cancelbtn()
-                                    }, 500);
-                                } else {
-                                    that.$message.error(res.data.msg);
-                                }
-                            })
-                        } else {
-                            if (that.DelfileName != null && that.DelfileName != "" && that.DelfileName != undefined) {
-                                that.$axios({
-                                    method: 'post',
-                                    url: "/api/Groups/DelFile",
-                                    headers: {
-                                        Authorization: 'Bearer ' + that.token
-                                    },
-                                    data: {
-                                        fileName: that.DelfileName,
-                                        id: that.id
-                                    }
-                                }).then(function (res) {
-                                    if (res.data.code == 200) {
-
-                                    }
-                                })
-                            }
-                            if (that.projectName != "" && that.projectName != null && that.projectName != undefined) {
-                                that.$refs.upload.submit();//上传文件到服务器
+                        that.submitUpload()
+                        that.InvitationOfficialActivities.attachment = that.projectName
+                        that.InvitationOfficialActivities.diId = that.DiIdSelect;
+                        that.InvitationOfficialActivities.createUserId = that.userId;
+                        var url = "/api/Groups/OpInvitationOfficialActivities"
+                        that.$axios({
+                            method: 'post',
+                            url: url,
+                            headers: {
+                                Authorization: 'Bearer ' + that.token
+                            },
+                            data: that.InvitationOfficialActivities
+                        }).then(function (res) {
+                            if (res.data.code == 200) {
+                                that.$message({
+                                    message: res.data.msg,
+                                    type: 'success'
+                                });
+                                setTimeout(() => {
+                                    that.cancelbtn()
+                                }, 500);
                             } else {
-                                that.InvitationOfficialActivities.attachment = that.projectName
-                                that.InvitationOfficialActivities.diId = that.DiIdSelect;
-                                that.InvitationOfficialActivities.createUserId = that.userId;
-                                var url = "/api/Groups/OpInvitationOfficialActivities"
-                                that.$axios({
-                                    method: 'post',
-                                    url: url,
-                                    headers: {
-                                        Authorization: 'Bearer ' + that.token
-                                    },
-                                    data: that.InvitationOfficialActivities
-                                }).then(function (res) {
-                                    if (res.data.code == 200) {
-                                        that.$message({
-                                            message: res.data.msg,
-                                            type: 'success'
-                                        });
-                                        setTimeout(() => {
-                                            that.cancelbtn();
-                                        }, 500);
-                                    } else {
-                                        that.$message.error(res.data.msg);
-                                    }
-                                })
+                                that.$message.error(res.data.msg);
                             }
-
-                        }
+                        })
                     } else {
                         this.$message.error('请完善信息在保存!');
                         return false;
@@ -958,30 +905,30 @@ export default {
         // 文件超出限制
         exceed(files, fileList) {
             this.$message.warning(
-                `当前限制选择 1个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length
+                `当前限制选择 10个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length
                 } 个文件,请取消要替换的文件`
             );
         },
         //文件上传成功时的钩子
         upLoadSuccess(response, file, fileList) {
             if (response.code == 200) {
-                var that = this;
-                that.$axios({
-                    method: 'post',
-                    url: "/api/Groups/DelFile",
-                    headers: {
-                        Authorization: 'Bearer ' + that.token
-                    },
-                    data: {
-                        fileName: that.DelfileName,
-                        id: that.id
-                    }
-                }).then(function (res) {
-                    if (res.data.code == 200) {
+                // var that = this;
+                // that.$axios({
+                //     method: 'post',
+                //     url: "/api/Groups/DelFile",
+                //     headers: {
+                //         Authorization: 'Bearer ' + that.token
+                //     },
+                //     data: {
+                //         fileName: that.DelfileName,
+                //         id: that.id
+                //     }
+                // }).then(function (res) {
+                //     if (res.data.code == 200) {
 
-                    }
-                })
-                that.InvitationOfficialActivities.attachment = response.data
+                //     }
+                // })
+                // that.InvitationOfficialActivities.attachment = response.data
                 that.InvitationOfficialActivities.diId = that.DiIdSelect;
                 that.InvitationOfficialActivities.createUserId = that.userId;
                 var url = "/api/Groups/OpInvitationOfficialActivities"
@@ -1000,7 +947,7 @@ export default {
                         });
                         that.loading = true;
                         setTimeout(() => {
-                            that.$router.push('/home/InvitationOfficialActivities')
+                            that.$router.push('/home/InvitationOfficialActivities?DiId='+that.DiIdSelect)
                         }, 500);
                     } else {
                         that.$message.error(res.data.msg);
@@ -1012,23 +959,105 @@ export default {
             }
 
         },
+        //上传服务器
+        submitUpload(val) {
+            //判断是否有文件再上传
+            var verdict=false
+            if (this.uploadFiles.length === 0) {
+                return this.$message.warning('请选取文件后再上传');
+            }
+            // 下面的代码将创建一个空的FormData对象:
+            const formData = new FormData()
+            // 你可以使用FormData.append来添加键/值对到表单里面;
+            this.uploadFiles.forEach((file) => {
+                if(file.raw!=undefined){
+                    verdict=true;
+                    formData.append('files', file.raw);
+                }
+            })
+            if(!verdict){
+                return
+            }
+            var that = this;
+            var url = "/api/Groups/UploadProjects"
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer ' + that.token,
+                    TypeName: "B"
+                },
+                data:formData
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    
+                } else {
+                    that.$message.error(res.data.msg);
+                }
+            })
+        },
         //文件上传失败时的钩子
         upLoadError(response, file, fileList) {
             console.log("项目添加失败");
         },
-        beforeRemove(file, fileList) {
-            console.log(file.name)
-            let id1 = this.uploadFiles.findIndex(item => {
-                if (item.name == file.name) {
-                    return true
+        //删除文件
+        beforeRemove(file,fileList){
+            if(file && file.status=="success"){
+                return this.$confirm('此文件已上传至服务器此操作将永久删除该文件, 是否继续?', '提示', {
+                    confirmButtonText: '确定',
+                    cancelButtonText: '取消',
+                    type: 'warning'
+                }).then(() => {
+                    
+                    
+                }).catch(() => {
+                    this.$message({
+                        type: 'info',
+                        message: '已取消删除'
+                    });     
+                    reject(false)     
+                });
+            }else{
+                let id1 = this.projectName.findIndex(item => {
+                    if (item.name == file.name) {
+                        return true
+                    }
+                })
+                this.projectName.splice(id1, 1)
+            }
+        },
+        handleRemove(file, fileList) {
+            var that = this;
+            that.$axios({
+                method: 'post',
+                url: "/api/Groups/DelFile",
+                headers: {
+                    Authorization: 'Bearer ' + that.token,
+                    typeName:'B'
+                },
+                data: {
+                    fileName: file.name,
+                    id: that.id,
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    let id1 = that.projectName.findIndex(item => {
+                        if (item.name == file.name) {
+                            return true
+                        }
+                    })
+                    that.projectName.splice(id1, 1)
+                    that.$message({
+                        type: 'success',
+                        message: res.data.msg
+                    });
                 }
             })
-            this.uploadFiles.splice(id1, 1)
-            this.projectName = ""
-            this.DelfileName = file.name
+            
         },
-        onChange(file, fileList) {
-            this.projectName = file.name
+        onChange(file, fileList) { 
+            this.uploadFiles = fileList;
+            this.projectName.push(file.name)
         },
         QueryRate() {
             var url = "/api/Business/PostGroupTeamRateByDiIdAndCTableId"

+ 2 - 0
src/components/OP/VisaPriec.vue

@@ -72,6 +72,8 @@
                             <span v-else-if="isPay.row.isPay == 0">未支付</span>
                         </template>
                     </el-table-column>
+                    <el-table-column prop="payName" label="支付方式">
+                    </el-table-column>
                     <el-table-column label="操作">
                         <template slot-scope="scope">
                             <el-button type="primary" size="mini" icon="el-icon-edit"

+ 20 - 7
src/components/Resource/InvitationOfficialActivityData.vue

@@ -57,17 +57,17 @@
                             {{scope.row.country|filter_emptyAcquiesce}}
                         </template>
                     </el-table-column>
-                    <el-table-column prop="city" label="城市">
+                    <el-table-column prop="city" width="100" label="城市">
                         <template slot-scope="scope">
                             {{scope.row.city|filter_emptyAcquiesce}}
                         </template>
                     </el-table-column>
-                    <el-table-column prop="unitName" label="邀请方名称">
+                    <el-table-column width="165" prop="unitName" label="邀请方名称">
                         <template slot-scope="scope">
                             {{scope.row.unitName|filter_emptyAcquiesce}}
                         </template>
                     </el-table-column>
-                    <el-table-column prop="field" label="涉及领域">
+                    <el-table-column width="100" prop="field" label="涉及领域">
                         <template slot-scope="scope">
                             {{scope.row.field|filter_emptyAcquiesce}}
                         </template>
@@ -77,7 +77,7 @@
                             {{scope.row.contact|filter_emptyAcquiesce}}
                         </template>
                     </el-table-column>
-                    <el-table-column prop="job" label="职务">
+                    <el-table-column prop="job" width="165" label="职务">
                         <template slot-scope="scope">
                             {{scope.row.job|filter_emptyAcquiesce}}
                         </template>
@@ -87,7 +87,20 @@
                             {{scope.row.tel|filter_emptyAcquiesce}}
                         </template>
                     </el-table-column>
-                    <el-table-column prop="delegationStr" label="关联团组">
+                    <el-table-column prop="remark" label="备注">
+                        <template slot-scope="scope">
+                            <el-popover
+                            v-if="scope.row.remark!=''"
+                            placement="top"
+                            width="500"
+                            trigger="hover">
+                                {{scope.row.remark}}
+                                <span style="display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden;cursor: pointer;color: #48a2ff;" slot="reference">{{scope.row.remark|filter_emptyAcquiesce}}</span>
+                            </el-popover>
+                            <span v-else>{{scope.row.remark|filter_emptyAcquiesce}}</span>
+                        </template>
+                    </el-table-column>
+                    <el-table-column width="165" prop="delegationStr" label="关联团组">
                         <template slot-scope="scope">
                             <div id="delegationStr">
                                 <el-tooltip v-show="scope.row.delegationStr != ''" class="item" effect="dark"
@@ -109,9 +122,9 @@
                     </el-table-column>
                     <el-table-column width="80" prop="createUserName" label="录入者">
                     </el-table-column>
-                    <el-table-column prop="createTime" label="录入时间">
+                    <el-table-column width="100" prop="createTime" label="录入时间">
                     </el-table-column>
-                    <el-table-column label="操作">
+                    <el-table-column width="160" label="操作">
                         <template slot-scope="scope">
                             <el-button size="mini" @click="upDate(scope.$index, scope.row)">编辑</el-button>
                             <el-button size="mini" type="danger" @click="del(scope.$index, scope.row)">删除</el-button>

+ 539 - 0
src/components/Resource/TranslatorBase.vue

@@ -0,0 +1,539 @@
+<template>
+    <div class="TranslatorBase-all">
+        <el-dialog width="1000px" title="翻译人员信息" :visible.sync="TranslatorBaseform">
+            <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm form-style">
+                <el-form-item label="所在地区" prop="area">
+                    <el-input v-model="ruleForm.area"></el-input>
+                </el-form-item>
+                <el-form-item label="姓名" prop="name">
+                    <el-input v-model="ruleForm.name"></el-input>
+                </el-form-item>
+                <el-form-item label="性别" prop="sex">
+                    <el-radio-group v-model="ruleForm.sex">
+                        <el-radio label="男"></el-radio>
+                        <el-radio label="女"></el-radio>
+                    </el-radio-group>
+                </el-form-item>
+                <el-form-item label="证件照" prop="photo">
+                    <el-upload
+                        class="avatars-uploader"
+                        action=""
+                        :show-file-list="false"
+                        :on-change="handleAvatarchange">
+                            <img v-if="imageUrl" :src="imageUrl" class="avatars">
+                            <i v-else class="el-icon-plus avatars-uploader-icon"></i>
+                    </el-upload>
+                </el-form-item>
+                <div class="pj-form">
+                    <el-form-item label="联系电话" prop="tel">
+                        <el-input v-model="ruleForm.tel"></el-input>
+                    </el-form-item>
+                    <el-form-item label="邮箱号" prop="email">
+                        <el-input v-model="ruleForm.email"></el-input>
+                    </el-form-item>
+                    <el-form-item label="微信号" prop="wechatNo">
+                        <el-input v-model="ruleForm.wechatNo"></el-input>
+                    </el-form-item>
+                    <el-form-item label="其他账号" prop="otherSocialAccounts">
+                        <el-input v-model="ruleForm.otherSocialAccounts"></el-input>
+                    </el-form-item>
+                    <el-form-item label="语种" prop="language">
+                        <el-input v-model="ruleForm.language"></el-input>
+                    </el-form-item>
+                </div>
+                <el-form-item label="费用" prop="price">
+                    <el-input-number :precision="2" placeholder="邀请费用" v-model="ruleForm.price" :controls='false'></el-input-number>
+                </el-form-item>
+                <el-form-item label="币种" prop="currency">
+                    <el-select filterable v-model="ruleForm.currency" placeholder="请选择活动区域">
+                        <el-option v-for="(item,index) in currencyarr" :key="index" :label="item.name" :value="item.id"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item></el-form-item>
+                <el-form-item label="简历/证书" >
+                    <el-upload
+                    class="upload-demo"
+                    ref="upload"
+                    action=""
+                    :multiple="true"
+                    :on-change="handleChange"
+                    :on-preview="handlePreview"
+                    :on-remove="handleRemove"
+                    :file-list="fileList"
+                    :auto-upload="false">
+                    <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
+                    <!-- <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button> -->
+                    <!-- <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> -->
+                    </el-upload>
+                </el-form-item>
+                <div class="TranslatorBase-form-btn">
+                    <el-button type="primary" @click="submitForm('ruleForm')">保存</el-button>
+                    <!-- <el-button @click="resetForm('ruleForm')">重置</el-button> -->
+                </div>
+            </el-form>
+        </el-dialog>
+        <div class="TranslatorBase-title">
+            <div>翻译人员库</div>
+        </div>
+        <div class="TranslatorBase-search">
+            <div class="TranslatorBase-search-ul">
+                <div class="TranslatorBase-search-li">
+                    <label>翻译人姓名</label>
+                    <el-input size="small" placeholder="请输入内容" v-model="input" clearable></el-input>
+                </div>
+                <div class="TranslatorBase-search-li">
+                    <el-button size="small" @click="TranslatorLibraryItem()" type="primary">查询</el-button>
+                </div>
+                <!-- <div class="TranslatorBase-search-li">
+                    <label>请输入内容</label>
+                    <el-input size="small" placeholder="请输入内容" v-model="input" clearable></el-input>
+                </div>
+                <div class="TranslatorBase-search-li">
+                    <label>请输入内容</label>
+                    <el-input size="small" placeholder="请输入内容" v-model="input" clearable></el-input>
+                </div>
+                <div class="TranslatorBase-search-li">
+                    <label>请输入内容</label>
+                    <el-input size="small" placeholder="请输入内容" v-model="input" clearable></el-input>
+                </div> -->
+            </div>
+            <div>
+                <el-button size="small" @click="abbtlbBtn" type="primary">新增</el-button>
+            </div>
+        </div>
+        <div class="TranslatorBase-table">
+            <el-table :data="tableData" border style="width: 100%">
+                <el-table-column prop="area" label="地区" width="180">
+                </el-table-column>
+                <el-table-column prop="name" label="姓名" width="100">
+                </el-table-column>
+                <el-table-column prop="sex" label="性别" width="60">
+                </el-table-column>
+                <el-table-column prop="tel" label="电话" width="120">
+                </el-table-column>
+                <el-table-column prop="email" label="邮箱" width="120">
+                </el-table-column>
+                <el-table-column prop="wechatNo" label="微信" width="120">
+                </el-table-column>
+                <el-table-column prop="price" label="费用" width="120">
+                    <template slot-scope="scope">
+                        {{townum(scope.row.price)}}
+                    </template>
+                </el-table-column>
+                <el-table-column prop="currency" label="币种" width="100">
+                </el-table-column>
+                <el-table-column prop="createUserName" label="录入人" width="100">
+                </el-table-column>
+                <el-table-column prop="createTime" label="录入时间" width="180">
+                </el-table-column>
+                <el-table-column prop="remark" label="备注">
+                </el-table-column>
+                <el-table-column label="操作" width="180">
+                    <template slot-scope="scope">
+                        <el-button @click="edittib(scope.$index, scope.row)" size="mini" >编辑</el-button>
+                        <el-button size="mini" type="danger" >删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        return {
+            token:'',
+            input: '',
+            tableData: [],
+            TranslatorBaseform: false,
+            Id:0,
+            ruleForm: {
+                area:'',
+                name: '',
+                sex:'',
+                photo:'',
+                tel:'',
+                email:'',
+                wechatNo:'',
+                otherSocialAccounts:'',
+                language:'',
+                price:0,
+                currency:'',
+                files:[],
+                remark:'',
+                region: '',
+            },
+            currencyarr:[],
+            rules: {
+                area: [
+                    { required: true, message: '请输入所在地区', trigger: 'blur' },
+                ],
+                name: [
+                    { required: true, message: '请输入姓名', trigger: 'blur' },
+                ],
+                sex: [
+                    { required: true, message: '请选择性别', trigger: 'change' },
+                ],
+                tel: [
+                    { required: true, message: '请输入联系电话', trigger: 'blur' },
+                ],
+                email: [
+                    { required: true, message: '请输入邮箱号', trigger: 'blur' },
+                ],
+                wechatNo: [
+                    { required: true, message: '请输入微信号', trigger: 'blur' },
+                ],
+                otherSocialAccounts: [
+                    { required: true, message: '请输入其他账号', trigger: 'blur' },
+                ],
+                language: [
+                    { required: true, message: '请输入语种', trigger: 'blur' },
+                ],
+                price: [
+                    { required: true, message: '请输入费用', trigger: 'blur' },
+                ],
+                currency: [
+                    { required: true, message: '请选择币种', trigger: 'change' },
+                ],
+            },
+
+            //touxiang
+            imageUrl: '',
+            //附件
+            fileList:[]
+        }
+    },
+    methods: {
+        //保留两位小数
+        townum(val){
+            val=Number(val);
+            return val.toFixed(2);
+        },
+        //获取基础数据
+        TranslatorLibraryInit(){
+            var that = this;
+            var url = "/api/Resource/TranslatorLibraryInit"
+            this.$axios({
+                method: 'get',
+                url: url,
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.currencyarr=res.data.data;
+                } else {
+                    that.$message.error(res.data.msg);
+                }
+            })
+        },
+        //表单初始化
+        formInitialization(){
+            this.Id=0;
+            this.ruleForm= {
+                area:'',
+                name: '',
+                sex:'',
+                photo:'',
+                tel:'',
+                email:'',
+                wechatNo:'',
+                otherSocialAccounts:'',
+                language:'',
+                price:0,
+                currency:'',
+                files:[],
+                remark:'',
+                region: '',
+            }
+        },
+        //新增
+        abbtlbBtn(){
+            this.formInitialization();
+            this.$nextTick(() => {  this.$refs['ruleForm'].clearValidate();});
+            this.TranslatorBaseform=true;
+        },
+        //编辑
+        edittib(index,val){
+            this.imageUrl=''
+            // this.$nextTick(() => {  this.$refs['ruleForm'].clearValidate();});
+            this.TranslatorBaseform=true;
+            console.log(val);
+            var that = this;
+            var url = "/api/Resource/TranslatorLibraryInfo/id?id="+val.id
+            this.$axios({
+                method: 'get',
+                url: url,
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.Id=res.data.data.id;
+                    that.ruleForm.area=res.data.data.area;
+                    that.ruleForm.name=res.data.data.name;
+                    that.ruleForm.sex=res.data.data.sex==2?'女':'男';
+                    that.ruleForm.tel=res.data.data.tel;
+                    that.ruleForm.email=res.data.data.email;
+                    that.ruleForm.wechatNo=res.data.data.wechatNo;
+                    that.ruleForm.otherSocialAccounts=res.data.data.otherSocialAccounts;
+                    that.ruleForm.language=res.data.data.language;
+                    that.ruleForm.price=res.data.data.price;
+                    that.ruleForm.currency=res.data.data.currency;
+                    that.ruleForm.photo=that.base64ImgtoFile(res.data.data.photo);
+                    console.log(that.ruleForm.photo);
+                    that.imageUrl=res.data.data.photo;
+                    // console.log();
+                } else {
+                    that.$message.error(res.data.msg);
+                }
+            })
+        },
+        //base转图片
+        base64ImgtoFile(dataurl, filename = 'file') {
+            if(dataurl==""){
+                return
+            }
+            let arr = dataurl.split(',')
+            let mime = arr[0].match(/:(.*?);/)[1]
+            let suffix = mime.split('/')[1]
+            let bstr = atob(arr[1])
+            let n = bstr.length
+            let u8arr = new Uint8Array(n)
+            while (n--) {
+                u8arr[n] = bstr.charCodeAt(n)
+            }
+            return new File([u8arr], `${filename}.${suffix}`, {
+                type: mime
+            })
+        },
+        //获取列表
+        TranslatorLibraryItem(){
+            var that = this;
+            var url = "/api/Resource/TranslatorLibraryItem"
+            this.$axios({
+                method: 'post',
+                url: url,
+                data:{
+                    portType:1,
+                    pageIndex: 1,
+                    pageSize: 10,
+                    name: that.input
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.tableData=res.data.data;
+                } else {
+                    that.$message.error(res.data.msg);
+                }
+            })
+        },
+        submitForm(formName) {
+            this.$refs[formName].validate((valid) => {
+                if (valid) {
+                    this.TranslatorLibraryOp(1)
+                } else {
+                    console.log('error submit!!');
+                    return false;
+                }
+            });
+        },
+        resetForm(formName) {
+            this.$refs[formName].resetFields();
+        },
+        //头像
+        handleAvatarchange(file){
+            if (file.status !== 'ready') return;
+            const isJPG = file.raw.type === 'image/jpeg';
+            const isLt2M = file.size / 1024 / 1024 < 2;
+            if (!isJPG) {
+                return this.$message.error('上传头像图片只能是 JPG 格式!');
+            }
+            if (!isLt2M) {
+                return this.$message.error('上传头像图片大小不能超过 2MB!');
+            }
+            this.imageUrl = URL.createObjectURL(file.raw);
+            this.getBase64(file)
+        },
+        //base64转译
+        getBase64(e) {
+			// 选择的文件
+			let file = e.raw;
+            // 判断文件是否读取完毕,读取完毕后执行
+            if (window.FileReader) {
+                let reader = new FileReader();
+                reader.readAsDataURL(file);
+                reader.onload = e => {
+                    let base64String = e.target.result;
+                    // 此处可对该base64进行获取赋值传入后端
+                    this.ruleForm.photo=base64String;
+                    console.log(base64String);
+                }
+            }
+        },
+
+        //附件
+        // 文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用,function(file, fileList)
+        handleChange(file, fileList) {
+            if (file.status !== 'ready') return;
+            this.fileList = fileList;
+            const formData = []
+            this.fileList.forEach((file) => {
+                if(file.raw!=undefined){
+                    formData.push(file.raw);
+                }
+            })
+            this.ruleForm.files=formData
+        },
+        //保存
+        TranslatorLibraryOp(opStatus){
+            var that = this;
+            var url = "api/Resource/TranslatorLibraryOp"
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer '+that.token,
+                    'Content-Type':'multipart/form-data'
+                },
+                data:{
+                    portType:1,
+                    status:opStatus,
+                    id:that.Id,
+                    area:that.ruleForm.area,
+                    name:that.ruleForm.name,
+                    sex:that.ruleForm.sex=='男'?1:2,
+                    photo:that.ruleForm.photo,
+                    tel:that.ruleForm.tel,
+                    email:that.ruleForm.email,
+                    wechatNo:that.ruleForm.wechatNo,
+                    otherSocialAccounts:that.ruleForm.otherSocialAccounts,
+                    language:that.ruleForm.language,
+                    price:that.ruleForm.price,
+                    currency:that.ruleForm.currency,
+                    files:that.ruleForm.files,
+                    remark:'',
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    
+                } else {
+                    that.$message.error(res.data.msg);
+                }
+            })
+        },
+        submitUpload() {
+            this.$refs.upload.submit();
+        },
+        handleRemove(file, fileList) {
+            console.log(file, fileList);
+        },
+        handlePreview(file) {
+            console.log(file);
+        }
+    },
+    mounted(){
+        this.token = JSON.parse(localStorage.getItem('userinif')).token;
+        this.TranslatorLibraryInit();
+        this.TranslatorLibraryItem();
+    }
+}
+</script>
+<style>
+.TranslatorBase-all {
+    background-color: #fff;
+    padding: 10px;
+    box-shadow: 0 0 5px #0005;
+    border-radius: 10px;
+    min-height: 830px;
+}
+
+.TranslatorBase-title {
+    display: flex;
+    font-size: 17px;
+    font-weight: 600;
+    color: #555;
+    margin-top: 8px;
+    margin-bottom: 10px;
+    justify-content: space-between;
+    align-items: center;
+
+}
+
+.TranslatorBase-search {
+    display: flex;
+    justify-content: space-between;
+}
+
+.TranslatorBase-search-ul {
+    display: flex;
+}
+
+.TranslatorBase-search-li {
+    width: 300px;
+    display: flex;
+    align-items: center;
+    margin-right: 10px;
+}
+
+.TranslatorBase-search-li label {
+    color: #606266;
+    width: 100px;
+}
+
+.TranslatorBase-table {
+    margin-top: 10px;
+}
+.form-style{
+    display: flex;
+    flex-wrap:wrap ;
+    justify-content: space-between;
+}
+.form-style .el-form-item{
+    width:33%;
+}
+.TranslatorBase-form-btn{
+     text-align: right;
+     width: 100%;
+}
+.form-style .avatars-uploader .el-upload{
+    width: 100%;
+}
+.form-style .el-select{
+    width: 100%;
+}
+.form-style .el-input-number{
+    width: 100%;
+}
+.pj-form{
+    width:66.5%;
+    display: flex;
+    justify-content: space-between;
+    flex-wrap: wrap;
+}
+.pj-form .el-form-item{
+    width:49.5%;
+}
+
+.avatars-uploader .el-upload {
+    border: 1px dashed #d9d9d9;
+    border-radius: 6px;
+    cursor: pointer;
+    position: relative;
+    overflow: hidden;
+}
+
+.avatars-uploader .el-upload:hover {
+    border-color: #409EFF;
+}
+
+.avatars-uploader-icon {
+    font-size: 28px;
+    color: #8c939d;
+    width: 178px;
+    height: 178px;
+    line-height: 178px;
+    text-align: center;
+}
+
+.avatars {
+    width: 178px;
+    height: 178px;
+    display: block;
+}
+
+</style>

+ 2 - 3
src/components/statistics/Reportstbale.vue

@@ -145,7 +145,7 @@
                     </el-table>
                     <div v-html="proceedsReceivedStr.split(/\\r\\n/g).join('<br/>')" class="reportsbale-table-text"></div>
                 </div>
-                <div class="reportsbale-table-li">
+                <!-- <div class="reportsbale-table-li">
                     <el-table
                     :data="extraCostsViews"
                     border
@@ -206,7 +206,6 @@
                             width="80">
                                 <template slot-scope="scope">
                                     {{scope.row.payWay!="刷卡"?'—':scope.row.cardType}}
-                                    <!-- {{ scope.row.cardType=='其他'?'—':scope.row.cardType==''?'—':scope.row.cardType }} -->
                                 </template>
                             </el-table-column>
                             <el-table-column
@@ -224,7 +223,7 @@
                         </el-table-column>
                     </el-table>
                     <div v-html="extraCostsStr.split(/\\r\\n/g).join('<br/>')" class="reportsbale-table-text"></div>
-                </div>
+                </div> -->
                 <div class="reportsbale-table-li">
                     <el-table
                     :data="paymentRefundAndOtherMoneyViews"

+ 6 - 0
src/router/index.js

@@ -125,6 +125,7 @@ import VisaCommission from '@/components/OP/VisaCommission';
 import SuppliesInventory from '@/components/OP/SuppliesInventory';
 import CardReconciliation from '@/components/Finance/CardReconciliation';
 import EvaluationForm from '@/components/EvaluationForm'
+import TranslatorBase from '@/components/Resource/TranslatorBase'
 
 Vue.use(Router)
 
@@ -751,6 +752,11 @@ export default new Router({
           name: 'CardReconciliation',
           component: CardReconciliation
         },
+        {
+          path: '/home/TranslatorBase',
+          name: 'TranslatorBase',
+          component: TranslatorBase
+        },
       ]
     },
     {