浏览代码

合并服务器

yuanrf 2 年之前
父节点
当前提交
9f9de583f3

+ 441 - 48
src/components/Finance/Cost.vue

@@ -81,7 +81,7 @@
                 </div>
             </div>
             <div style="color: #606266;font-size: 15px;font-weight: 600;">请选择要显示的项:</div>
-            <el-checkbox-group v-model="checkList">
+            <el-checkbox-group class="form-ss" v-model="checkList">
                 <el-checkbox v-for="(item,index) in  checkOptions" :key="index" :title="item.tips" :label="item.label"></el-checkbox>
             </el-checkbox-group>
             <el-table 
@@ -102,32 +102,47 @@
                     :width="item.width" 
                     :label="item.label"
                     v-if="checkList.includes(item.label)">
-                    <!-- eslint-disable-next-line -->
-                    <template slot="header" slot-scope="scope">
-                        <el-tooltip effect="dark" :content="item.label" placement="top">
-                            <span class="rapAddress">{{item.label}}</span>
-                        </el-tooltip>
-                    </template>
-                    <template slot-scope="scope">
+                        <!-- eslint-disable-next-line -->
+                        <template slot="header" slot-scope="scope">
+                            <el-tooltip effect="dark" :content="item.describe" placement="top">
+                                <span class="rapAddress">{{item.label}}</span>
+                            </el-tooltip>
+                        </template>
+                        <template slot-scope="scope">
                             <div v-if="item.prop === 'sales'">
-                            <el-input
+                                <el-input
                                 :ref="'el-input-' + index"
                                 v-model="scope.row[item.prop]"
-                                maxlength="100"
                                 show-word-limit/>
                             </div>
                             <div v-else-if="item.prop === 'id'">
-                            <el-input
+                                <el-input
                                 :ref="'el-input-' + index"
                                 v-model="scope.row[item.prop]"
                                 type="number"
                                 min="0"/>
                             </div>
+                            <div v-else-if="item.prop === 'sale'">
+                                <el-row class="figures-btn">
+                                    <el-button @click="handleEdit(scope.$index, scope.row)" size="mini" type="primary">司兼导</el-button>
+                                    <el-button size="mini" type="primary">导 游</el-button>
+                                    <el-button size="mini" type="primary">车数据</el-button>
+                                    <el-button size="mini" type="primary">景 点</el-button>
+                                </el-row>
+                            </div>
                             <span v-else :title="scope.row[item.prop]">{{ scope.row[item.prop] }}</span>
                         </template>
                     </el-table-column>
                 </template>
+                <el-table-column
+                label="操作">
+                    <!-- eslint-disable-next-line -->
+                    <template slot-scope="scope">
+                        <el-button size="mini" @click="handleDelete(scope.$index, scope.row,tableData)" type="danger"><i class="el-icon-delete"></i></el-button>
+                    </template>
+                </el-table-column>
             </el-table>
+            <div style="text-align: center;padding: 10px 0;"><el-button @click="addStrip" type="primary">添 加 <i class="el-icon-plus"></i></el-button></div>
             <div class="sheet-box">
                 <div class="sheet-li">
                     <div style="color: #606266;font-size: 15px;font-weight: 600;">请选择要显示的项:</div>
@@ -145,6 +160,60 @@
                                 :key="index"
                                 :prop="itemsheetone.prop"
                                 :label="itemsheetone.childLabel">
+                                    <template slot-scope="scope">
+                                        <div v-if="itemsheetone.prop === 'costPerson'">
+                                            <el-input
+                                            :ref="'el-input-' + index"
+                                            v-model="scope.row[itemsheetone.prop]"
+                                            show-word-limit/>
+                                        </div>
+                                        <div v-else-if="itemsheetone.prop === 'toll'">
+                                            <el-input
+                                            :ref="'el-input-' + index"
+                                            v-model="scope.row[itemsheetone.prop]"
+                                            show-word-limit/>
+                                        </div>
+                                        <div v-else-if="itemsheetone.prop === 'coefficient'">
+                                            <el-input
+                                            :ref="'el-input-' + index"
+                                            v-model="scope.row[itemsheetone.prop]"
+                                            show-word-limit/>
+                                        </div>
+                                        <span v-else :title="scope.row[itemsheetone.prop]">{{ scope.row[itemsheetone.prop] }}</span>
+                                    </template>
+                                </el-table-column>
+                            </el-table>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="cabin-box">
+                <div class="cabin-li">
+                    <div style="color: #606266;font-size: 15px;font-weight: 600;">请选择要显示的项:</div>
+                    <el-checkbox-group v-model="cabinoneList">
+                        <el-checkbox v-for="(item,index) in cabinoneOptions" :key="index" :label="item"></el-checkbox>
+                    </el-checkbox-group>
+                    <div v-for="(cabinitem,index) in cabinDatal" :key="index">
+                        <div class="biaoge" v-if="cabinoneList.includes(cabinitem.label)">
+                            <div style="    color: rgb(96, 98, 102);font-size: 15px;font-weight: 600;">{{cabinitem.label}}</div>
+                            <el-table
+                            :data="cabinitem.sheetInfo"
+                            border
+                            style="width: 100%">
+                                <el-table-column
+                                v-for="(itemcabinone,index) in cabinitem.childList"
+                                :key="index"
+                                :prop="itemcabinone.prop"
+                                :label="itemcabinone.childLabel">
+                                    <template slot-scope="scope">
+                                        <div v-if="itemcabinone.prop === 'toll'">
+                                            <el-input
+                                            :ref="'el-input-' + index"
+                                            v-model="scope.row[itemcabinone.prop]"
+                                            show-word-limit/>
+                                        </div>
+                                        <span v-else :title="scope.row[itemcabinone.prop]">{{ scope.row[itemcabinone.prop] }}</span>
+                                    </template>
                                 </el-table-column>
                             </el-table>
                         </div>
@@ -152,12 +221,26 @@
                 </div>
             </div>
         </div>
+        <el-dialog title="外层 Dialog" :visible.sync="outerVisible">
+            <el-dialog
+              width="30%"
+              title="内层 Dialog"
+              :visible.sync="innerVisible"
+              append-to-body>
+            </el-dialog>
+            <div slot="footer" class="dialog-footer">
+              <el-button @click="outerVisible = false">取 消</el-button>
+              <el-button type="primary" @click="innerVisible = true">打开内层 Dialog</el-button>
+            </div>
+        </el-dialog>
     </div>
 </template>
 <script>
 export default {
     data () {
       return {
+        outerVisible: false,
+        innerVisible: false,
         checkList: ['DAY','ITIN','VA','VF','VRD','T/G S'],
         checkOptions:[
             {label:'DAY',tips:'时间(DATE)'},
@@ -199,21 +282,43 @@ export default {
             {label:'E/C T',tips:'会务费(EXPO/CONFERENCE TICKET)'}
         ],
         tableLabel: [
-            {label: 'DAY', width: '90', prop: 'id'},
-            {label: 'DATE', width: '', prop: 'date'},
-            {label: 'ITIN', width: '', prop: 'sales'},
-            {label: 'VA', width: '', prop: 'sale'},
-            {label: 'VT', width: '', prop: 'const'},
-            {label: 'VF', width: '', prop: 'profit'},
-            {label: 'VN', total: '', prop: 'profit'},
-            {label: 'VRD', width: '', prop: 'profit'},
-            {label: 'T/G S', width: '', prop: 'profit'},
-            {label: 'T/G N', width: '', prop: 'profit'},
-            {label: 'T/G WH', width: '', prop: 'profit'},
-            {label: 'T/G OF', width: '', prop: 'profit'},
-            {label: 'T/G M', width: '', prop: 'profit'},
-            {label: 'T/G A', width: '', prop: 'profit'},
-            {label: 'T/G TF', width: '', prop: 'profit'}
+            {label: 'DAY', width: '90', prop: 'id',describe:'时间(DATE)'},
+            {label: 'DATE', width: '', prop: 'date',describe:'行程描述(ITINERARY)'},
+            {label: 'ITIN', width: '', prop: 'sales',describe:'行程描述(ITINERARY)'},
+            {label: 'VA', width: '', prop: 'sale',describe:'车服务区域(Vehicle Area)'},
+            {label: 'VT', width: '', prop: 'const',describe:'车型(VEHICLE TYPE)'},
+            {label: 'VF', width: '', prop: 'profit',describe:'车费用(VEHICLE FEES)'},
+            {label: 'VN', total: '', prop: 'profit',describe:'车数量(VEHICLE Number)'},
+            {label: 'VRD', width: '', prop: 'profit',describe:'用车时间(VEHICLE RENTAL DURATION)'},
+            {label: 'T/G S', width: '', prop: 'profit',describe:'导游工资(TOUR GUIDE SALARY)'},
+            {label: 'T/G N', width: '', prop: 'profit',describe:'导游数量(TOUR GUIDE Number'},
+            {label: 'T/G WH', width: '', prop: 'profit',describe:'导游工作时间(导游工作时间)'},
+            {label: 'T/G OF', width: '', prop: 'profit',describe:'导游超时费用(TOUR GUIDE OVERTIME FEES)'},
+            {label: 'T/G M', width: '', prop: 'profit',describe:'导游餐补(TOUR GUIDE MEALS)'},
+            {label: 'T/G A', width: '', prop: 'profit',describe:'导游房补(TOUR GUIDE ACCOMMODATION)'},
+            {label: 'T/G TF', width: '', prop: 'profit',describe:'导游交通费(TOUR GUIDE TRANSPORATION FEES)'},
+            {label: 'T/G EF', width: '', prop: 'profit',describe:'导游景点费(TOUR GUIDE ENTRANCE FEES)'},
+            {label: 'C/F M', width: '', prop: 'profit',describe:'司机餐补(CHAUFFEUR MEALS)'},
+            {label: 'C/F OF', width: '', prop: 'profit',describe:'司机超时费用(CHAUFFEUR OVERTIME FEES)'},
+            {label: 'B', width: '', prop: 'profit',describe:'早餐(BREAKFAST) #个人成本'},
+            {label: 'L', width: '', prop: 'profit',describe:'午餐(LUNCH) #个人成本'},
+            {label: 'D', width: '', prop: 'profit',describe:'晚餐(DINNER) #个人成本'},
+            {label: 'TBR', width: '', prop: 'profit',describe:'双人间(TWIN BED ROOM) #个人成本'},
+            {label: 'SGR', width: '', prop: 'profit',describe:'单间(SINGLE ROOM) #个人成本'},
+            {label: 'JS/ES', width: '', prop: 'profit',describe:'小套房/豪华套房(JUNIOR SUITE/EXECUTIVE SUITE) #个人成本'},
+            {label: 'SUITE', width: '', prop: 'profit',describe:'套房(SUITE) #个人成本'},
+            {label: 'ACCO N', width: '', prop: 'profit',describe:'住宿地名称(ACCOMMODATION NAME)'},
+            {label: 'T/V', width: '', prop: 'profit',describe:'公务活动费用(T/V)'},
+            {label: '1/L', width: '', prop: 'profit',describe:'公务活动费用(1/L)'},
+            {label: 'I/F', width: '', prop: 'profit',describe:'公务翻译费用(INTERPRETER FEES)'},
+            {label: 'EF', width: '', prop: 'profit',describe:'景点门票(ENTRANCE FEE) #个人成本'},
+            {label: 'B/R/F', width: '', prop: 'profit',describe:'饮料零食水果(BEVERAGE/RRESHMENT/FRUIT)'},
+            {label: 'TE', width: '', prop: 'profit',describe:'出行物资(TRAVELLLING ESSENTIALS) #个人成本'},
+            {label: 'T/G T', width: '', prop: 'profit',describe:'导游小费(T/G TIPS) #个人成本'},
+            {label: 'DRV T', width: '', prop: 'profit',describe:'司机小费(DRIVER TIPS #个人成本)'},
+            {label: 'P/C', width: '', prop: 'profit',describe:'零用金(PETTY CASH) #个人成本'},
+            {label: 'T/L F', width: '', prop: 'profit',describe:'领队费(TOUR LEADER FEES)'},
+            {label: 'E/C T', width: '', prop: 'profit',describe:'会务费(EXPO/CONFERENCE TICKET)'}
         ],
         statisticsArr: [
             {label: 'DAY', total: '', individual: ''},
@@ -234,10 +339,8 @@ export default {
             
         ],
         tableData: [
-			{id: 1, date: '2018-07-24', sales: 23.34, sale: 137597.76, const: 102203.71, profit: 35394.05},
-			{id: 2, date: '2018-07-24', sales: 23.34, sale: 137597.76, const: 102203.71, profit: 35394.05},
-			{id: 3, date: '2018-07-24', sales: 23.34, sale: 137597.76, const: 102203.71, profit: 35394.05},
-			{id: 4, date: '2018-07-24', sales: 23.34, sale: 137597.76, const: 102203.71, profit: 35394.05}
+			{id: 1, date: '2018-07-24', sales: 23.34, sale: 'ass', const: 102203.71, profit: 35394.05,a:"12"},
+			{id: 2, date: '2018-07-24', sales: 23.34, sale: 'z', const: 102203.71, profit: 35394.05}
 		],
         options: [{
           value: '选项1',
@@ -575,19 +678,268 @@ export default {
                 ]
             }
         ],
-        
+        cabinoneList: ['经济舱 TBR','经济舱 SGR','核酸检测','团组预算明细'],
+        cabinoneOptions:['经济舱 TBR','经济舱 SGR','公务舱 SGR','公务舱 JS/ES','公务舱 SUITE'],
+        cabinDatal:[
+            {
+                label:'经济舱 TBR',
+                childList:[
+                    {
+                        childLabel:'单人成本(CNY)',
+                        prop:'costPerson'
+                    },
+                    {
+                        childLabel:'人数',
+                        prop:'toll'
+                    },
+                    {
+                        childLabel:'总成本(CNY)',
+                        prop:'totalCost'
+                    },
+                    {
+                        childLabel:'单人报价(CNY)',
+                        prop:'singleQuote'
+                    },
+                    {
+                        childLabel:'总报价(CNY)',
+                        prop:'totalQuote'
+                    },
+                    {
+                        childLabel:'单人利润(CNY)',
+                        prop:'singleProfit'
+                    },
+                    {
+                        childLabel:'总利润(CNY)',
+                        prop:'totalProfit'
+                    },
+                ],
+                sheetInfo:[
+                    { 
+                        costPerson: 1, 
+                        toll: 11, 
+                        totalCost: 137597.76, 
+                        singleQuote: 102203.71, 
+                        totalQuote: 35394.05, 
+                        singleProfit: 35394.05, 
+                        totalProfit: 35394.05 
+                    },
+                ]
+            },
+            {
+                label:'经济舱 SGR',
+                childList:[
+                    {
+                        childLabel:'单人成本(CNY)',
+                        prop:'costPerson'
+                    },
+                    {
+                        childLabel:'人数',
+                        prop:'toll'
+                    },
+                    {
+                        childLabel:'总成本(CNY)',
+                        prop:'totalCost'
+                    },
+                    {
+                        childLabel:'单人报价(CNY)',
+                        prop:'singleQuote'
+                    },
+                    {
+                        childLabel:'总报价(CNY)',
+                        prop:'totalQuote'
+                    },
+                    {
+                        childLabel:'单人利润(CNY)',
+                        prop:'singleProfit'
+                    },
+                    {
+                        childLabel:'总利润(CNY)',
+                        prop:'totalProfit'
+                    },
+                ],
+                sheetInfo:[
+                    { 
+                        costPerson: 1, 
+                        toll: 11, 
+                        totalCost: 137597.76, 
+                        singleQuote: 102203.71, 
+                        totalQuote: 35394.05, 
+                        singleProfit: 35394.05, 
+                        totalProfit: 35394.05 
+                    },
+                ]
+            },
+            {
+                label:'公务舱 SGR',
+                childList:[
+                    {
+                        childLabel:'单人成本(CNY)',
+                        prop:'costPerson'
+                    },
+                    {
+                        childLabel:'人数',
+                        prop:'toll'
+                    },
+                    {
+                        childLabel:'总成本(CNY)',
+                        prop:'totalCost'
+                    },
+                    {
+                        childLabel:'单人报价(CNY)',
+                        prop:'singleQuote'
+                    },
+                    {
+                        childLabel:'总报价(CNY)',
+                        prop:'totalQuote'
+                    },
+                    {
+                        childLabel:'单人利润(CNY)',
+                        prop:'singleProfit'
+                    },
+                    {
+                        childLabel:'总利润(CNY)',
+                        prop:'totalProfit'
+                    },
+                ],
+                sheetInfo:[
+                    { 
+                        costPerson: 1, 
+                        toll: 11, 
+                        totalCost: 137597.76, 
+                        singleQuote: 102203.71, 
+                        totalQuote: 35394.05, 
+                        singleProfit: 35394.05, 
+                        totalProfit: 35394.05 
+                    },
+                ]
+            },
+            {
+                label:'公务舱 JS/ES',
+                childList:[
+                    {
+                        childLabel:'单人成本(CNY)',
+                        prop:'costPerson'
+                    },
+                    {
+                        childLabel:'人数',
+                        prop:'toll'
+                    },
+                    {
+                        childLabel:'总成本(CNY)',
+                        prop:'totalCost'
+                    },
+                    {
+                        childLabel:'单人报价(CNY)',
+                        prop:'singleQuote'
+                    },
+                    {
+                        childLabel:'总报价(CNY)',
+                        prop:'totalQuote'
+                    },
+                    {
+                        childLabel:'单人利润(CNY)',
+                        prop:'singleProfit'
+                    },
+                    {
+                        childLabel:'总利润(CNY)',
+                        prop:'totalProfit'
+                    },
+                ],
+                sheetInfo:[
+                    { 
+                        costPerson: 1, 
+                        toll: 11, 
+                        totalCost: 137597.76, 
+                        singleQuote: 102203.71, 
+                        totalQuote: 35394.05, 
+                        singleProfit: 35394.05, 
+                        totalProfit: 35394.05 
+                    },
+                ]
+            },
+            {
+                label:'公务舱 SUITE',
+                childList:[
+                    {
+                        childLabel:'单人成本(CNY)',
+                        prop:'costPerson'
+                    },
+                    {
+                        childLabel:'人数',
+                        prop:'toll'
+                    },
+                    {
+                        childLabel:'总成本(CNY)',
+                        prop:'totalCost'
+                    },
+                    {
+                        childLabel:'单人报价(CNY)',
+                        prop:'singleQuote'
+                    },
+                    {
+                        childLabel:'总报价(CNY)',
+                        prop:'totalQuote'
+                    },
+                    {
+                        childLabel:'单人利润(CNY)',
+                        prop:'singleProfit'
+                    },
+                    {
+                        childLabel:'总利润(CNY)',
+                        prop:'totalProfit'
+                    },
+                ],
+                sheetInfo:[
+                    { 
+                        costPerson: 1, 
+                        toll: 11, 
+                        totalCost: 137597.76, 
+                        singleQuote: 102203.71, 
+                        totalQuote: 35394.05, 
+                        singleProfit: 35394.05, 
+                        totalProfit: 35394.05 
+                    },
+                ]
+            }
+            ,
+            {
+                label:'团组预算明细',
+                childList:[
+                    {
+                        childLabel:'团组成本(CNY)',
+                        prop:'groupCosts'
+                    },
+                    {
+                        childLabel:'团组报价(CNY)',
+                        prop:'gtroupQuotes'
+                    },
+                    {
+                        childLabel:'团组利润(CNY)',
+                        prop:'groupProfit'
+                    }
+                ],
+                sheetInfo:[
+                    { 
+                        groupCosts: 1, 
+                        gtroupQuotes: 11, 
+                        groupProfit: 137597.76, 
+                    },
+                ]
+            }
+        ]
       };
     },
     watch:{
 			// 此处监听variable变量,当期有变化时执行
             checkList(item1,item2){
-                console.log(item1)
+                // console.log(item1)
                 // console.log(item2)
                 // item1为新值,item2为旧值
             },
     },
     methods:{
         getSummaries(param) {
+            console.log(param)
             const { columns, data } = param;
             const sums = [];
             columns.forEach((column, index) => {
@@ -595,14 +947,14 @@ export default {
                 sums[index] = "总计:";
                 return;
             }
-            
             const values = data.map(item => Number(item[column.property]));
-                if (!values.every(value => isNaN(value))) {
-                    sums[index] = values.reduce((prev, curr) => {
-                        const value = Number(curr);
-                        if (!isNaN(value)) {
-                            return prev + curr;
-                        } else {
+            console.log(values)
+            if (!values.every(value => isNaN(value))) {
+                sums[index] = values.reduce((prev, curr) => {
+                    const value = Number(curr);
+                    if (!isNaN(value)) {
+                        return prev + curr;
+                    } else {
                         return prev;
                     }
                     
@@ -613,11 +965,39 @@ export default {
             }
         });
         return sums;
-      }
+        },
+        handleEdit(index, row) {
+            console.log(index, row);
+            this.outerVisible=true;
+        },
+        handleDelete(index, row,rows) {
+            console.log(index, row,rows);
+            this.$confirm('此操作将删除该条信息, 是否继续?', '提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+            }).then(() => {
+                this.$message({
+                    message:'已删除' ,
+                    type: 'success',
+                    offset:50
+                });
+                rows.splice(index, 1);
+            }).catch(() => {
+                this.$message({
+                    type: 'info',
+                    message: '已取消删除'
+                });          
+            });
+        },
+        addStrip(){
+            this.tableData.push(
+                {id: '', date: '', sales:'', sale: '', const: '', profit: ''}
+            )
+        }
     },
     mounted(){
-        console.log(this.checkList.includes("A"));
-        console.log(this.checkList.includes("1"));
+        
     }
 }
 </script>
@@ -662,18 +1042,15 @@ export default {
     .cost-box .el-checkbox-group{
         margin: 5px 0;
     }
-    .cost-box .el-checkbox{
+    .form-ss .el-checkbox{
         width: 100px;
         margin: 5px 0;
     }
     .sheet-box{
         margin-top: 30px;
     }
-    .sheet-head{
-        display: flex;
-    }
-    .sheet-head-li{
-        margin-right: 20px;
+    .cabin-box{
+        margin-top: 30px;
     }
     .biaoge{
         margin-bottom: 30px;
@@ -683,4 +1060,20 @@ export default {
         white-space: nowrap;
         text-overflow: ellipsis;
     }
+    .cost-box .cabin-box .cost-box .el-checkbox{
+        margin-right: 20px;
+    }
+    .cost-box .el-table .cell{
+        text-align: center;
+    }
+    .figures-btn{
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+    }
+    .figures-btn .el-button--mini{
+        width: 70px;
+        margin: 2px 0;
+        margin-left:0 ;
+    }
 </style>

+ 347 - 0
src/components/Finance/DailyFeePayment.vue

@@ -0,0 +1,347 @@
+<template>
+    <div class="visa-box">
+        <div class="search-ul">
+            <div class="search-li">
+                <div class="feeType-box">
+                    <label>费用类型: </label>
+                    <el-select filterable placeholder="请输入费用类型">
+                        <el-option
+                        v-for="item in GMAudit"
+                        :key="item.value"
+                        :label="item.groupName"
+                        :value="item.value">
+                        </el-option>
+                    </el-select>
+                </div>
+                <div class="feeType-box">
+                    <label>费用子类型: </label>
+                    <el-select filterable placeholder="请输入费用子类型">
+                        <el-option
+                        v-for="item in GMAudit"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value">
+                        </el-option>
+                    </el-select>
+                </div>
+                <div class="feeType-box">
+                    <label>财务审核: </label>
+                    <el-select v-model="financialValue" filterable placeholder="请输入财务审核状态">
+                        <el-option
+                        v-for="item in financialAudit"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value">
+                        </el-option>
+                    </el-select>
+                </div>
+                <div class="feeType-box">
+                    <label>总经理审核: </label>
+                    <el-select v-model="GMValue" filterable placeholder="请输入总经理审核状态">
+                        <el-option
+                        v-for="item in GMAudit"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value">
+                        </el-option>
+                    </el-select>
+                </div>
+                <!-- <div class="feeType-box">
+                    <label>申请说明:</label>
+                    <el-input v-model="formInline.feeDesc" placeholder="申请说明"></el-input>
+                </div> -->
+                <div class="feeType-box">
+                    <label>申请人: </label>
+                    <el-select v-model="GMValue" filterable placeholder="请输入申请人">
+                        <el-option
+                        v-for="item in GMAudit"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value">
+                        </el-option>
+                    </el-select>
+                </div>
+            </div>
+            <!-- <div class="search-li">
+                <el-button type="primary">查询</el-button>
+            </div> -->
+        </div>
+        <el-row>
+            <el-button type="primary">导出费用</el-button>
+            <el-button type="primary">批量生成</el-button>
+            <el-button type="primary">新增数据</el-button>
+          </el-row>
+        <div class="form-box">
+            <template>
+                <el-table
+                :data="tableData.slice((currentPage-1)*pageSize,currentPage*pageSize)"
+                border
+                style="width: 100%">
+                    <el-table-column
+                        prop="rouNumber"
+                        label="序 号"
+                        width="55">
+                        <template slot-scope="scope">
+                            {{(currentPage - 1) * pageSize + scope.$index + 1}}
+                        </template>
+                    </el-table-column>
+                    <el-table-column
+                        prop="companyName"
+                        width="200"
+                        label="公 司">
+                    </el-table-column>
+                    <el-table-column
+                        prop="instructions"
+                        label="费用描述"
+                        width="220">
+                    </el-table-column>
+                    <el-table-column
+                        prop="sumPrice"
+                        :formatter="numFilter"
+                        label="费用总计"
+                        width="100">
+                    </el-table-column>
+                    <el-table-column
+                        prop="createUser"
+                        label="申请人"
+                        width="100">
+                    </el-table-column>
+                    <el-table-column
+                        prop="createTime"
+                        label="申请时间"
+                        width="150">
+                    </el-table-column>
+                    <el-table-column
+                        prop="fAuditDesc"
+                        label="财务审核"
+                        width="100">
+                    </el-table-column>
+                    <el-table-column
+                        prop="mAuditDesc"
+                        label="总经理审核"
+                        width="100">
+                    </el-table-column>
+                    <el-table-column
+                        prop="Id"
+                        label="操 作">
+                        <el-link type="primary">生成</el-link>
+                        <el-link type="primary">详细</el-link>
+                        <el-link type="danger">删除</el-link>
+                    </el-table-column>
+                </el-table>
+            </template>
+            <div class="block">
+                <el-pagination align='center' 
+                    @size-change="handleSizeChange" 
+                    @current-change="handleCurrentChange"
+                    :current-page="currentPage" 
+                    :page-sizes="[5,10,15,20]" 
+                    :page-size="pageSize" 
+                    layout="total, sizes, prev, pager, next" 
+                    :total="tableDataLength">
+                </el-pagination>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+export default {
+    data() {
+        return {
+            input: '',
+            financialValue:"-1",
+            financialAudit:[
+                {
+                    value: '-1',
+                    label: '全部'
+                },
+                {
+                    value: '0',
+                    label: '未审核'
+                },
+                {
+                    value: '1',
+                    label: '已通过'
+                },
+                {
+                    value: '2',
+                    label: '未通过'
+                },
+            ],
+            GMValue:"-1",
+            GMAudit:[
+                {
+                    value: '-1',
+                    label: '全部'
+                },
+                {
+                    value: '0',
+                    label: '未审核'
+                },
+                {
+                    value: '1',
+                    label: '已通过'
+                },
+                {
+                    value: '2',
+                    label: '未通过'
+                },
+            ],
+            formInline:{
+                feeDesc:""
+            },
+            tableData: [],
+            tableDataLength: 0, // 数据总条数
+            currentPage: 1,     // 当前页码
+            pageSize: 5 ,       // 每页的数据条数
+            currentPageUser: 1, // 当前页码
+            pageSizeUser: 5 ,   // 每页的数据条数
+            multipleTable:[],
+            token:''
+        }
+    },
+    methods:{
+        //每页条数改变时触发 选择一页显示多少行
+        handleSizeChange(val) {
+            this.currentPage = 1;
+            this.pageSize = val;
+        },
+        //当前页改变时触发 跳转其他页
+        handleCurrentChange(val) {
+            this.currentPage = val;
+        },
+        //每页条数改变时触发 选择一页显示多少行
+        handleSizeChanges(val) {
+            this.currentPageUser = 1;
+            this.pageSizeUser = val;
+        },
+        //当前页改变时触发 跳转其他页
+        handleCurrentChanges(val) {
+            this.currentPageUser = val;
+        },
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+            console.log(this.multipleSelection)
+        },
+        getRowKeys(row) {
+            return row.num
+        },
+        numFilter(row,column) {
+            return parseFloat(row[column.property]).toFixed(2);
+        },
+        async postPageDailyPaymentList() {
+            var url = "/api/Financial/PostPageDailyPaymentList"
+            var that = this
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer ' + this.token
+                },
+                data: {
+                    portType: 1,
+                    pageIndex: that.currentPage,
+                    pageSize: that.pageSize,
+                    companyId: -1,
+                    financialAuditStatus: -1,
+                    managerAuditStatus: -1,
+                    feeTypeId: -1,
+                    feeSubTypeId: -1,
+                    feeDesc: '',
+                    createUserId: -1
+                }
+            }).then(function (res) {
+                console.log(res)
+                if (res.data.code == 200) {
+                    that.tableData = res.data.data;
+                    that.tableDataLength = res.data.count;
+                }
+            })
+        },
+    },
+    mounted() {
+        this.token = JSON.parse(localStorage.getItem('userinif')).token;
+        // this.getgroupsname();
+        this.postPageDailyPaymentList();
+        
+    }
+}
+</script>
+<style>
+    .visa-box{
+        background-color: #fff;
+        padding: 10px;
+        box-shadow: 0 0 5px #0005;
+        border-radius: 10px;
+    }
+    /*.search-li:nth-child(1){
+        width: 80%;
+    }*/
+
+    /*.search-li:nth-child(2){
+        width: 20%;
+        justify-content: end;
+    }*/
+    .search-ul{
+        display: flex;
+        justify-content: space-between;
+        margin-bottom: 10px;
+    }
+    .search-li label{
+        color: #606266;
+    }
+    .search-li{
+        display: flex;
+    }
+    .search-li>div{
+        margin-right: 10px;
+    }
+    .form-box .el-table th.el-table__cell>.cell{
+        text-align: center;
+    }
+    .form-box .el-table td.el-table__cell div{
+        text-align: center;
+    }
+    .form-box .block{
+        margin-top: 10px;
+    }
+    .visa-box .el-row{
+        text-align: right;
+        margin-bottom: 5px;
+    }
+    .visas-list{
+        background-color: #fff;
+        padding: 10px;
+        box-shadow: 0 0 5px #0005;
+        border-radius: 10px;
+    }
+    .visas-title{
+        display: flex;
+        font-size: 17px;
+        font-weight:600 ;
+        color: #555;
+        margin-top: 8px;
+        margin-bottom: 2px;
+        justify-content: space-between;
+        align-items: center;
+    }
+    .visas-box{
+        display: flex;
+    }
+    .visas-box>button{
+        margin-left: 10px;
+        padding: 8px 20px;
+    }
+ 
+    .country-box{
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+    }
+    .interpret-box{
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+    }
+</style>

+ 13 - 0
src/components/Finance/DailyFeeedit.vue

@@ -0,0 +1,13 @@
+<template>
+    <div>
+        
+    </div>
+</template>
+<script>
+export default {
+    
+}
+</script>
+<style>
+    
+</style>

+ 202 - 0
src/components/OP/GroupsTaskAssignment.vue

@@ -0,0 +1,202 @@
+<template>
+    <div class="communal-list">
+        <div class="communal-title">
+            <div>团组任务分配</div>
+        </div>
+        <div>
+            <div style="display: flex;">
+                <div style="width: 30%;">
+                    <el-select v-model="diId" filterable clearable placeholder="请选择" style="width: 90%;"
+                        @change="diidChange()">
+                        <el-option v-for="item1 in delegationInfos" :key=item1.id :label=item1.name
+                            :value=item1.id></el-option>
+                    </el-select>
+                </div>
+                <div style="width: 30%;">
+                    <el-select v-model="ctId" filterable clearable placeholder="请选择" style="width: 90%;"
+                        @change="sdIdChange()">
+                        <el-option v-for=" item1 in setData" :key=item1.id :label=item1.name :value=item1.id></el-option>
+                    </el-select>
+                </div>
+                <div style="width: 30%;">
+                    <el-button type="primary" style="margin-left: 10px;" @click="btn">保存</el-button>
+                </div>
+            </div>
+        </div>
+        <div>
+            <span style="font-weight: bold;">团 号:</span>{{ DelegationInfo.tourCode }}
+            <span style="font-weight: bold;">客 户:</span>{{ DelegationInfo.clientName }}
+            <span style="font-weight: bold;">出访国家:</span>{{ DelegationInfo.visitCountry }}
+            <span style="font-weight: bold;">起止日期:</span>{{ DelegationInfo.visitStartDate }} ~ {{
+                DelegationInfo.visitEndDate }}
+            <span style="font-weight: bold;">天数/人数:</span>{{ DelegationInfo.visitDays }}天/{{ DelegationInfo.visitPNumber }}人
+        </div>
+        <div style="background-color:#215CA6;color: aliceblue;">
+            <div>人员安排</div>
+        </div>
+        <div style="margin-top: 10px;">
+            <div style="display: flex;flex-wrap: wrap;">
+                <div v-for="(  item, index  ) in   user  " :key="index"
+                    style="margin-left: 5px;width: 200px;margin-top: 10px;">
+                    <el-checkbox :label="item.id" :value="userStr.indexOf(item.id) != -1" border @change="check(item.id)">{{
+                        item.name
+                    }}</el-checkbox>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        return {
+            rules: {},
+            token: '',
+            userId: 0,
+            delegationInfos: [],
+            setData: [],
+            user: [],
+            diId: '',
+            ctId: '',
+
+            userStr: [],
+            TaskAssignment: {},
+            DelegationInfo: {}
+        }
+    },
+    methods: {
+        GetTaskAssignmen() {
+            var that = this
+            var url = "/api/Groups/GetTaskAssignmen";
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer ' + this.token
+                },
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.delegationInfos = res.data.data.delegationInfos;
+                    that.setData = res.data.data.setData;
+                    that.user = res.data.data.user;
+                }
+            })
+        },
+        TaskAssignmenQuery() {
+            var that = this
+            var diidI = 0;
+            if (that.diId != '') {
+                diidI = that.diId
+            }
+            var ctIdI = 0;
+            if (that.ctId != '') {
+                ctIdI = that.ctId
+            }
+            var url = "/api/Groups/TaskAssignmenQuery";
+            this.$axios({
+                method: 'post',
+                url: url,
+                data: {
+                    diId: diidI,
+                    ctId: ctIdI,
+                },
+                headers: {
+                    Authorization: 'Bearer ' + this.token
+                },
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.userStr = res.data.data.userStr
+                    that.TaskAssignment = res.data.data.taskAssignment
+                    that.DelegationInfo = res.data.data.delegationInfo
+                } else {
+                    that.userStr = [];
+                    that.TaskAssignment = {};
+                    that.DelegationInfo = {}
+                }
+            })
+        },
+        btn() {
+            var id = 0
+            var that = this;
+            if (that.TaskAssignment.id != undefined) {
+                id = that.TaskAssignment.id;
+            }
+            var url = "/api/Groups/GetTaskAssignmenOp";
+            this.$axios({
+                method: 'post',
+                url: url,
+                data: {
+                    diId: that.diId,
+                    ctId: that.ctId,
+                    uIdStr: that.userStr,
+                    isEnable: 1,
+                    createUserId: that.userId,
+                    remark: ""
+                },
+                headers: {
+                    Authorization: 'Bearer ' + that.token
+                },
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.$message({
+                        message: '保存成功!',
+                        type: 'success'
+                    });
+                } else {
+                    that.$message.error('保存失败!' + resp.data.msg);
+                }
+            })
+        },
+        diidChange() {
+            this.TaskAssignmenQuery()
+            console.log(this.userStr)
+        },
+        sdIdChange() {
+            this.TaskAssignmenQuery()
+            console.log(this.userStr)
+        },
+        check(id) {
+            var index = this.userStr.indexOf(id)
+            if (index == -1) {
+                this.userStr.push(id)
+            } else {
+                this.userStr = this.userStr.filter((x) => x !== id)
+            }
+        }
+    },
+    mounted() {
+        this.token = JSON.parse(localStorage.getItem('userinif')).token;
+        this.userId = JSON.parse(localStorage.getItem('userinif')).userInfo.userId
+        this.GetTaskAssignmen();
+        this.TaskAssignmenQuery();
+    }
+}
+</script>
+<style>
+.communal-list {
+    background-color: #fff;
+    padding: 10px;
+    box-shadow: 0 0 5px #0005;
+    border-radius: 10px;
+}
+
+.communal-title {
+    display: flex;
+    font-size: 17px;
+    font-weight: 600;
+    color: #555;
+    margin-top: 8px;
+    margin-bottom: 10px;
+    justify-content: space-between;
+    align-items: center;
+}
+
+.communal-box {
+    display: flex;
+}
+
+.communal-box>button {
+    margin-left: 10px;
+    padding: 8px 20px;
+}
+</style>

+ 522 - 0
src/components/OP/OCRIdentify.vue

@@ -0,0 +1,522 @@
+<template>
+    <div class="ocr-all">
+        <div style="color: #606266;font-size: 15px;font-weight: 600;">PS:选择图片后,点击要需要识别类型!</div>
+        <div class="ocr-box">
+            <el-upload
+            action="#"
+            list-type="picture-card"
+            :on-change="handleChangePicture"
+            :auto-upload="false">
+                <i slot="default" class="el-icon-plus"></i>
+                <div slot="file" slot-scope="{file}">
+                <img
+                    class="el-upload-list__item-thumbnail"
+                    :src="file.url" alt=""
+                >
+                <span class="el-upload-list__item-actions">
+                    <span
+                    class="el-upload-list__item-preview"
+                    @click="handlePictureCardPreview(file)"
+                    >
+                        <i class="el-icon-zoom-in"></i>
+                    </span>
+                    <!-- <span
+                    v-if="!disabled"
+                    class="el-upload-list__item-delete"
+                    @click="handleDownload(file)"
+                    >
+                    <i class="el-icon-download"></i>
+                    </span>
+                    <span
+                    v-if="!disabled"
+                    class="el-upload-list__item-delete"
+                    @click="handleRemove(file)"
+                    >
+                    <i class="el-icon-delete"></i>
+                    </span> -->
+                </span>
+                </div>
+            </el-upload>
+            <el-dialog :visible.sync="dialogVisible">
+                <img width="100%" :src="dialogImageUrl" alt="">
+            </el-dialog>
+        </div>
+        <div style="color: #606266;font-size: 15px;font-weight: 600;text-align: center;">上传图片只能是 JPG,PNG,BMP 格式!大小不能超过 7MB!</div>
+        <el-row>
+            <el-button type="primary" @click="license()">营业执照</el-button>
+            <el-button type="primary" @click="IDcardR()">身份证-人像面</el-button>
+            <el-button type="primary" @click="creditCode()">统一信用代码</el-button>
+            <el-button type="primary" @click="IDcardG()">身份证-国徽面</el-button>
+            <el-button type="primary" @click="driving()">行驶证</el-button>
+            <el-button type="primary" @click="household()">户口本</el-button>
+            <el-button type="primary" @click="deed()">房产证</el-button>
+            <el-button type="primary" @click="Marriage()">结婚证</el-button>
+            <el-button type="primary" @click="mainlandPassport()">大陆护照</el-button>
+            <el-button type="primary" @click="universal()">通用印刷体</el-button>
+            <el-button type="primary">营业执照(英文)</el-button>
+            <el-button type="primary">统一信用代码(英文)</el-button>
+            <el-button type="primary">身份证-人像面(英文)</el-button>
+            <el-button type="primary">身份证-国徽面(英文)</el-button>
+            <el-button type="primary">行驶证(英文)</el-button>
+            <el-button type="primary">户口本(英文)</el-button>
+            <!-- <el-button type="primary">户口本-成员页</el-button> -->
+            <!-- <el-button type="primary">户口本-成员页(英文)</el-button> -->
+            <el-button type="primary">房产证(英文)</el-button>
+            <el-button type="primary">结婚证(英文)</el-button>
+            <el-button type="primary">大陆护照(英文)</el-button>
+        </el-row>
+    </div>
+</template>
+
+<script>
+import { el } from '@fullcalendar/core/internal-common';
+export default {
+    data() {
+    return {
+        token:'',
+        userid:'',
+        dialogImageUrl: '',
+        dialogVisible: false,
+        disabled: false,
+        panduan:"",
+        picBase64:''
+  	}
+	},
+    methods: {
+        // handleRemove(file,) {
+        //     console.log(file);
+        //     file.status='cancel'
+        // },
+        handlePictureCardPreview(file) {
+            this.dialogImageUrl = file.url;
+            this.dialogVisible = true;
+        },
+        // handleDownload(file) {
+        //     console.log(file);
+        // },
+        handleChangePicture(file, fileList) {
+            this.beforeAvatarUpload(file)
+            if (fileList.length > 1) {
+                    fileList.splice(0, 1);
+                }
+            if(this.panduan){
+                this.getBase64(file.raw).then(res => {
+                    this.picBase64=res
+                    console.log(res)
+                });
+            }
+        },
+        beforeAvatarUpload(file) {
+            this.panduan=true;
+            const isJPG = file.raw.type === 'image/jpeg';
+            const isPNG = file.raw.type === 'image/png';
+            const isWEBP = file.raw.type === 'image/webp';
+            const isLt2M = file.size / 1024 / 1024 < 7;
+            if (!isJPG&&!isPNG&&!isWEBP) {
+                this.$message.error('上传图片只能是 JPG,PNG,BMP 格式!');
+                this.panduan=false;
+            }
+            if (!isLt2M) {
+                this.$message.error('上传图片大小不能超过 7MB!');
+                this.panduan=false;
+            }
+            return isJPG && isLt2M;
+        },
+        getBase64(file) {
+            return new Promise(function (resolve, reject) {
+                const reader = new FileReader()
+                let imgResult = ''
+                reader.readAsDataURL(file)
+                reader.onload = function () {
+                imgResult = reader.result
+                }
+                reader.onerror = function (error) {
+                reject(error)
+                }
+                reader.onloadend = function () {
+                resolve(imgResult)
+                }
+            })
+        },
+        //身份证人像面
+        IDcardR(){
+            var url="/api/TencentOCR/GetIDCard"
+            var that=this
+            if(that.panduan){
+                that.fullscreenLoading = true;
+                this.$axios({
+                    method: 'post',
+                    url:url,
+                    headers:{
+                        Authorization:'Bearer '+this.token
+                    },
+                    data:{
+                        portType: 1,
+                        userId:that.userid,
+                        language:'en',
+                        picBase64:that.picBase64,
+                        cardSide:0
+                    }
+                }).then(function(res){
+                    if(res.data.code==200){       
+                        console.log(res)
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'success'
+                        });           
+                        // window.open(res.data.data.downUrl)
+                    }else{
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'warning'
+                        });       
+                    }
+                })
+            }else{
+                this.$message.error('请检查图片是否为此类型!');
+            }
+        },
+        //身份证国徽面
+        IDcardG(){
+            var url="/api/TencentOCR/GetIDCard"
+            var that=this
+            if(that.panduan){
+                that.fullscreenLoading = true;
+                this.$axios({
+                    method: 'post',
+                    url:url,
+                    headers:{
+                        Authorization:'Bearer '+this.token
+                    },
+                    data:{
+                        portType: 1,
+                        userId:that.userid,
+                        picBase64:that.picBase64,
+                        cardSide:1
+                    }
+                }).then(function(res){
+                    if(res.data.code==200){       
+                        console.log(res)
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'success'
+                        });           
+                        // window.open(res.data.data.downUrl)
+                    }else{
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'warning'
+                        });       
+                    }
+                })
+            }else{
+                this.$message.error('请检查图片是否为此类型!');
+            }
+        },
+        //营业执照
+        license(){
+            var url="/api/TencentOCR/GetBizLicenseOCR"
+            var that=this
+            if(that.panduan){
+                that.fullscreenLoading = true;
+                this.$axios({
+                    method: 'post',
+                    url:url,
+                    headers:{
+                        Authorization:'Bearer '+this.token
+                    },
+                    data:{
+                        picBase64:that.picBase64,
+                    }
+                }).then(function(res){
+                    if(res.data.code==200){       
+                        console.log(res)
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'success'
+                        });           
+                        // window.open(res.data.data.downUrl)
+                    }else{
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'warning'
+                        });       
+                    }
+                })
+            }else{
+                this.$message.error('请检查图片是否为此类型!');
+            }
+        },
+        //统一信用代码
+        creditCode(){
+            var url="/api/TencentOCR/GetOrgCodeCertOCR"
+            var that=this
+            if(that.panduan){
+                that.fullscreenLoading = true;
+                this.$axios({
+                    method: 'post',
+                    url:url,
+                    headers:{
+                        Authorization:'Bearer '+this.token
+                    },
+                    data:{
+                        picBase64:that.picBase64,
+                    }
+                }).then(function(res){
+                    if(res.data.code==200){       
+                        console.log(res)
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'success'
+                        });           
+                        window.open(res.data.data.downUrl)
+                    }else{
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'warning'
+                        });       
+                    }
+                })
+            }else{
+                this.$message.error('请检查图片是否为此类型!');
+            }
+        },
+        //行驶证
+        driving(){
+            var url="/api/TencentOCR/GetVehicleLicense"
+            var that=this
+            if(that.panduan){
+                that.fullscreenLoading = true;
+                this.$axios({
+                    method: 'post',
+                    url:url,
+                    headers:{
+                        Authorization:'Bearer '+this.token
+                    },
+                    data:{
+                        picBase64:that.picBase64,
+                        cardSide:0
+                    }
+                }).then(function(res){
+                    if(res.data.code==200){       
+                        console.log(res)
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'success'
+                        });           
+                        // window.open(res.data.data.downUrl)
+                    }else{
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'warning'
+                        });       
+                    }
+                })
+            }else{
+                this.$message.error('请检查图片是否为此类型!');
+            }
+        },
+        //户口本
+        household(){
+            var url="/api/TencentOCR/GetResidenceBookletOCR"
+            var that=this
+            if(that.panduan){
+                that.fullscreenLoading = true;
+                this.$axios({
+                    method: 'post',
+                    url:url,
+                    headers:{
+                        Authorization:'Bearer '+this.token
+                    },
+                    data:{
+                        picBase64:that.picBase64,
+                    }
+                }).then(function(res){
+                    if(res.data.code==200){       
+                        console.log(res)
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'success'
+                        });           
+                        // window.open(res.data.data.downUrl)
+                    }else{
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'warning'
+                        });       
+                    }
+                })
+            }else{
+                this.$message.error('请检查图片是否为此类型!');
+            }
+        },
+        //房产证
+        deed(){
+            var url="/api/TencentOCR/GetPropOwnerCert"
+            var that=this
+            if(that.panduan){
+                that.fullscreenLoading = true;
+                this.$axios({
+                    method: 'post',
+                    url:url,
+                    headers:{
+                        Authorization:'Bearer '+this.token
+                    },
+                    data:{
+                        picBase64:that.picBase64,
+                    }
+                }).then(function(res){
+                    if(res.data.code==200){       
+                        console.log(res)
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'success'
+                        });           
+                        // window.open(res.data.data.downUrl)
+                    }else{
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'warning'
+                        });       
+                    }
+                })
+            }else{
+                this.$message.error('请检查图片是否为此类型!');
+            }
+        },
+        //结婚证
+        Marriage(){
+            var url="/api/TencentOCR/GetMarriageLicense"
+            var that=this
+            if(that.panduan){
+                that.fullscreenLoading = true;
+                this.$axios({
+                    method: 'post',
+                    url:url,
+                    headers:{
+                        Authorization:'Bearer '+this.token
+                    },
+                    data:{
+                        picBase64:that.picBase64,
+                    }
+                }).then(function(res){
+                    if(res.data.code==200){       
+                        console.log(res)
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'success'
+                        });           
+                        // window.open(res.data.data.downUrl)
+                    }else{
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'warning'
+                        });       
+                    }
+                })
+            }else{
+                this.$message.error('请检查图片是否为此类型!');
+            }
+        },
+        //结婚证
+        mainlandPassport(){
+            var url="/api/TencentOCR/GetPassport"
+            var that=this
+            if(that.panduan){
+                that.fullscreenLoading = true;
+                this.$axios({
+                    method: 'post',
+                    url:url,
+                    headers:{
+                        Authorization:'Bearer '+this.token
+                    },
+                    data:{
+                        picBase64:that.picBase64,
+                    }
+                }).then(function(res){
+                    if(res.data.code==200){       
+                        console.log(res)
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'success'
+                        });           
+                        // window.open(res.data.data.downUrl)
+                    }else{
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'warning'
+                        });       
+                    }
+                })
+            }else{
+                this.$message.error('请检查图片是否为此类型!');
+            }
+        },
+        //通用印刷体
+        universal(){
+            var url="/api/TencentOCR/GetGeneralBasic"
+            var that=this
+            if(that.panduan){
+                that.fullscreenLoading = true;
+                this.$axios({
+                    method: 'post',
+                    url:url,
+                    headers:{
+                        Authorization:'Bearer '+this.token
+                    },
+                    data:{
+                        picBase64:that.picBase64,
+                    }
+                }).then(function(res){
+                    if(res.data.code==200){       
+                        console.log(res)
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'success'
+                        });           
+                        // window.open(res.data.data.downUrl)
+                    }else{
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'warning'
+                        });       
+                    }
+                })
+            }else{
+                this.$message.error('请检查图片是否为此类型!');
+            }
+        }
+    },
+    mounted(){
+        this.token=JSON.parse(localStorage.getItem('userinif')).token;
+        this.userid=JSON.parse(localStorage.getItem('userinif')).userInfo.userId;
+    }
+}
+</script>
+<style>
+    .ocr-all {
+        background-color: #fff;
+        padding: 10px;
+        box-shadow: 0 0 5px #0005;
+        border-radius: 10px;
+    }
+    .ocr-box .el-upload-list--picture-card .el-upload-list__item{
+        display: inline-flex;
+    }
+    .ocr-box{
+        display: flex;
+        justify-content: center;
+        margin-top: 180px;
+    }
+    .ocr-all .el-button--primary{
+        width: 160px;
+        margin: 0px 5px;
+        margin-bottom: 10px;
+    }
+    .ocr-all .el-row{
+        width: 44%;
+        margin: 0 auto;
+        margin-top: 30px;
+        margin-bottom: 180px;
+    }
+</style>

+ 206 - 139
src/components/OP/visaEdit.vue

@@ -24,7 +24,7 @@
                             <el-input v-model="deleClient.oldName"></el-input>
                         </el-form-item>
                         <el-form-item label="移动电话:" prop="phone">
-                            <el-input v-model="deleClient.phone"></el-input>
+                            <el-input v-model="deleClient.phone" placeholder="请输入11位手机号"></el-input>
                         </el-form-item>
                         <el-form-item label="出生日期:" prop="birthDay">
                             <el-date-picker v-model="deleClient.birthDay" type="date" placeholder="选择日期">
@@ -57,9 +57,16 @@
                         <el-form-item label="省份:" prop="birthProvince">
                             <el-input v-model="deleClient.birthProvince"></el-input>
                         </el-form-item>
-
                         <el-form-item label="最高学历:" prop="highestEducation">
-                            <el-input v-model="deleClient.highestEducation"></el-input>
+                            <el-select v-model="deleClient.highestEducation" filterable placeholder="请选择">
+                                <el-option key="高中" label="高中" value="高中"></el-option>
+                                <el-option key="大专" label="大专" value="大专"></el-option>
+                                <el-option key="本科" label="本科" value="本科"></el-option>
+                                <el-option key="研究生" label="研究生" value="研究生"></el-option>
+                                <el-option key="博士" label="博士" value="博士"></el-option>
+                                <el-option key="硕士" label="硕士" value="硕士"></el-option>
+                            </el-select>
+
                         </el-form-item>
                         <el-form-item label="家庭电话:" prop="tel">
                             <el-input v-model="deleClient.tel" placeholder="(座机)"></el-input>
@@ -109,14 +116,16 @@
                         </el-date-picker>
                     </el-form-item>
                     <div style="margin-top: 40px;,margin-left: 40px;">
-                        <el-button circle icon="el-icon-plus" @click="customerCertsAdd()"></el-button>
                         <el-button circle icon="el-icon-minus" @click="subcustomerCertsAdd(i, item.id)"
-                            v-if="i > 0"></el-button>
+                            v-if="i >= 0"></el-button>
                     </div>
 
                 </div>
                 <hr style='background-color:#5555; height:1px; border:none;' />
             </el-form>
+            <div style="text-align: center;">
+                <el-button circle icon="el-icon-plus" @click="customerCertsAdd()"></el-button>
+            </div>
         </div>
         <div class="plate-box">
             <div class="small-title">
@@ -126,6 +135,9 @@
                 <el-form :model="customerCompany" :rules="rules" ref="customerCompany" label-width="100px"
                     class="demo-deleClient" @submit.native.prevent>
                     <div class="foundation-box">
+                        <div style="width: 100%;padding-left: 50px;color: red;font-size: 12px;">
+                            若信息有误或没有单位请到客户公司资料编辑
+                        </div>
                         <el-form-item label="单位名称:" prop="companyName">
                             <el-select v-model="customerCompany.id" filterable placeholder="请选择公司"
                                 @change="companyChange(customerCompany.id)">
@@ -133,13 +145,12 @@
                                     :value="item.id">
                                 </el-option>
                             </el-select>
-                            <!-- <el-input v-model="customerCompany.companyName"></el-input> -->
                         </el-form-item>
-                        <el-form-item label="单位地址:" prop="address">
-                            <el-input v-model="customerCompany.address"></el-input>
+                        <el-form-item label="单位地址:" disabled prop="companyAddress">
+                            <el-input v-model="customerCompany.address" :disabled="true"></el-input>
                         </el-form-item>
-                        <el-form-item label="单位邮编:" prop="postCodes">
-                            <el-input v-model="customerCompany.postCodes"></el-input>
+                        <el-form-item label="单位邮编:" prop="companyPostCodes">
+                            <el-input v-model="customerCompany.postCodes" :disabled="true"></el-input>
                         </el-form-item>
                     </div>
                 </el-form>
@@ -241,7 +252,7 @@
                     <el-form-item label="姓名:" prop="name">
                         <el-input v-model="item.name" clearable></el-input>
                     </el-form-item>
-                    <el-form-item label="出生日期:" prop="birthDay">
+                    <el-form-item label="出生日期:" prop="FamilybirthDay">
                         <el-date-picker v-model="item.birthDay" type="date">
                         </el-date-picker>
                     </el-form-item>
@@ -299,13 +310,15 @@
                         </el-form-item>
                     </div>
                     <div style="line-height: 70px;margin-left: 15%;">
-                        <el-button circle icon="el-icon-plus" @click="customerFamilyAdd()"></el-button>
                         <el-button circle icon="el-icon-minus" @click="subcustomerFamilyAdd(index, item.id)"
-                            v-if="index > 0"></el-button>
+                            v-if="index >= 0"></el-button>
                     </div>
                 </div>
                 <hr style='background-color:#5555; height:1px; border:none;' />
             </el-form>
+            <div style="text-align: center;">
+                <el-button circle icon="el-icon-plus" @click="customerFamilyAdd()"></el-button>
+            </div>
         </div>
         <div class="plate-box">
             <div class="small-title">
@@ -585,13 +598,15 @@
                                     v-model="item.workState"></el-input>
                             </el-form-item>
                             <el-form-item style="margin-top: 5%;margin-left: 10%;">
-                                <el-button circle icon="el-icon-plus" @click="workExperienceadd()"></el-button>
                                 <el-button circle icon="el-icon-minus" @click="subworkExperience(w, item.id)"
-                                    v-if="w > 0"></el-button>
+                                    v-if="w >= 0"></el-button>
                             </el-form-item>
                         </div>
                         <hr style='background-color:#5555; height:1px; border:none;' />
                     </el-form>
+                    <div style="text-align: center;">
+                        <el-button circle icon="el-icon-plus" @click="workExperienceadd()"></el-button>
+                    </div>
                 </div>
 
             </div>
@@ -603,6 +618,7 @@
             <hr style='background-color:#5555; height:1px; border:none;' />
             <div class="tips">
                 <span>列出除小学以外的所有教育经历:从高中开始填写</span>
+
             </div>
             <div>
                 <el-form v-for="(item, e) in customerSchool" :key="e" @submit.native.prevent>
@@ -628,13 +644,15 @@
                             </el-date-picker>
                         </el-form-item>
                         <el-form-item style="margin-top: 3%;margin-left: 5px;">
-                            <el-button circle icon="el-icon-plus" @click="addcustomerSchool()"></el-button>
                             <el-button circle icon="el-icon-minus" @click="subcustomerSchool(e, item.id)"
-                                v-if="e > 0"></el-button>
+                                v-if="e >= 0"></el-button>
                         </el-form-item>
                     </div>
                     <hr style='background-color:#5555; height:1px; border:none;' />
                 </el-form>
+                <div style="text-align: center;">
+                    <el-button circle icon="el-icon-plus" @click="addcustomerSchool()"></el-button>
+                </div>
             </div>
 
         </div>
@@ -671,30 +689,69 @@
 <script>
 export default {
     data() {
-
         return {
             rules: {
                 lastName: [
-                    { required: true, message: '请输入姓', trigger: 'blur' },
-                    { min: 1, max: 3, message: '长度在 1 到 3 个字符', trigger: 'blur' }
+                    { required: true, message: '请输入姓', trigger: 'change' },
+                    { min: 1, max: 3, message: '长度在 1 到 3 个字符', trigger: 'change' }
                 ],
                 firstName: [
-                    { required: true, message: '请输入名', trigger: 'blur' },
-                    { min: 1, max: 3, message: '长度在 1 到 3 个字符', trigger: 'blur' }
+                    { required: true, message: '请输入名', trigger: 'change' },
+                    { min: 1, max: 3, message: '长度在 1 到 3 个字符', trigger: 'change' }
                 ],
+                oldName: [{ required: true, message: '请输入曾用名,没有则填写无', trigger: 'change' },],
                 phone: [
-                    { required: true, message: '请输入移动电话', trigger: 'blur' },
+                    { required: true, message: '请输入移动电话', trigger: 'change' },
+                    {
+                        pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+                        message: "请输入正确的手机号码",
+                        trigger: "change"
+                    }
                 ],
-                nationality: [
-                    { required: true, message: '请输入国籍', trigger: 'blur' },
+                birthDay: [{ required: true, message: '请选择出生日期', trigger: 'change', },],
+                party: [{ required: true, message: '请输入党派宗教', trigger: 'change', },],
+                sex: [{ required: true, message: '请选择性别', trigger: 'change', },],
+                marriage: [{ required: true, message: '请选择婚姻状态', trigger: 'change', }],
+                nationality: [{ required: true, message: '请输入国籍', trigger: 'change' },],
+                birthCity: [{ required: true, message: '请输入出生城市', trigger: 'change' }],
+                birthProvince: [{ required: true, message: '请输入出生省份', trigger: 'change' }],
+                highestEducation: [{ required: true, message: '请输入最高学历', trigger: 'change' }],
+                tel: [
+                    { required: true, message: '请输入固话', trigger: 'change' },
+                    {
+                        pattern: /0\d{2,3}-\d{7,8}/,
+                        message: "请输入正确固话",
+                        trigger: "change"
+                    }
                 ],
-                // certNo: [
-                //     { required: true, message: '请输入证件号', trigger: 'blur' },
-                // ],
-                // sdId: [
-                //     { required: true, message: '请选择证件类型', trigger: 'blur' },
-                // ]
-
+                email: [
+                    { required: true, message: '请输入邮箱', trigger: 'change' },
+                    {
+                        pattern: /^([a-zA-Z0-9]+[-_\.]?)+@[a-zA-Z0-9]+\.[a-z]+$/,
+                        message: "请输入正确的邮箱",
+                        trigger: "change"
+                    }
+                ],
+                postCodes: [
+                    { required: true, message: '请输入邮箱', trigger: 'change' },
+                    {
+                        pattern: /^[0-9]{6}$/,
+                        message: "请输入正确的邮政编码",
+                        trigger: "change"
+                    }
+                ],
+                address: [{ required: true, message: '请输入现居住地址', trigger: 'change' }],
+                costBearers: [{ required: true, message: '请输入费用承担着', trigger: 'change' }],
+                tableOpName: [{ required: true, message: '请输入经办人', trigger: 'change' }],
+                tableOpTel: [
+                    { required: true, message: '请输入经办人联系方式', trigger: 'change' },
+                    {
+                        pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+                        message: "请输入正确的手机号码",
+                        trigger: "change"
+                    }
+                ],
+                tableDate: [{ required: true, message: '请输入填表时间', trigger: 'change' }],
             },
             Id: 0,
             token: '',
@@ -727,7 +784,7 @@ export default {
                 crmCompanyId: '',
                 job: '',
                 workState: '',
-                workDate: '',
+                workDate: this.dateFormat(new Date()),
                 wage: '',
                 clientPhone: '',
                 clientFax: '',
@@ -800,7 +857,7 @@ export default {
                 [
                     {
                         id: 0,
-                        dcId: this.Id,
+                        dcId: 0,
                         sdId: '',
                         certNo: '',
                         country: '',
@@ -818,8 +875,8 @@ export default {
             {
                 address: "",
                 companyName: "",
-                createTime: "",
-                id: 0,
+                createTime: this.dateFormat(new Date()),
+                id: '',
                 postCodes: "",
                 remark: "",
                 userName: "",
@@ -828,7 +885,7 @@ export default {
             workExperience: [
                 {
                     id: 0,
-                    dcId: this.Id,
+                    dcId: 0,
                     company: "",
                     companyAddress: "",
                     phone: "",
@@ -845,7 +902,7 @@ export default {
             customerSchool: [
                 {
                     id: 0,
-                    dcId: this.Id,
+                    dcId: 0,
                     school: '',
                     address: '',
                     teacher: '',
@@ -861,7 +918,7 @@ export default {
             customerFamily: [
                 {
                     id: 0,
-                    dcId: this.Id,
+                    dcId: 0,
                     appellation: "",
                     name: "",
                     birthDay: this.dateFormat(new Date()),
@@ -1083,7 +1140,7 @@ export default {
                         that.$message.error("网络错误,请稍后重试");
                     });
                 } else {
-                    console.log('error submit!!');
+                    this.$message.error('请完善基础信息在提交');
                     return false;
                 }
             });
@@ -1116,30 +1173,33 @@ export default {
         },
         //删除家庭信息
         subcustomerFamilyAdd(index, Id) {
-            var url = "/api/CRM/DelCustomerFamily"
-            var that = this
-            this.$axios({
-                method: 'post',
-                url: url,
-                headers: {
-                    Authorization: 'Bearer ' + this.token
-                },
-                data: {
-                    Id: Id,
-                    DeleteUserId: that.userId
-                }
-            }).then(function (res) {
-                if (res.data.code == 200) {
-                    that.$message({
-                        message: '删除家庭成员成功',
-                        type: 'success'
-                    });
-                } else {
-                    that.$message.error('删除失败!');
-                }
-            }).catch(function (error) {
-                that.$message.error("网络错误,请稍后重试");
-            });
+            if (Id != 0) {
+
+                var url = "/api/CRM/DelCustomerFamily"
+                var that = this
+                this.$axios({
+                    method: 'post',
+                    url: url,
+                    headers: {
+                        Authorization: 'Bearer ' + this.token
+                    },
+                    data: {
+                        Id: Id,
+                        DeleteUserId: that.userId
+                    }
+                }).then(function (res) {
+                    if (res.data.code == 200) {
+                        that.$message({
+                            message: '删除家庭成员成功',
+                            type: 'success'
+                        });
+                    } else {
+                        that.$message.error('删除失败!');
+                    }
+                }).catch(function (error) {
+                    that.$message.error("网络错误,请稍后重试");
+                });
+            }
             this.customerFamily.splice(index, 1)
         },
         //添加证件信息
@@ -1161,34 +1221,36 @@ export default {
         },
         //删除证件信息
         subcustomerCertsAdd(index, Id) {
-            var url = "/api/CRM/DelCustomerCerts"
-            var that = this
-            this.$axios({
-                method: 'post',
-                url: url,
-                headers: {
-                    Authorization: 'Bearer ' + this.token
-                },
-                data: {
-                    Id: Id,
-                    DeleteUserId: that.userId
-                }
-            }).then(function (res) {
-                console.log(res)
+            if (Id != 0) {
 
-                if (res.data.code == 200) {
-                    that.$message({
-                        message: '删除证件成功',
-                        type: 'success'
-                    });
-                } else {
-                    that.$message.error('删除失败!');
-                }
+                var url = "/api/CRM/DelCustomerCerts"
+                var that = this
+                this.$axios({
+                    method: 'post',
+                    url: url,
+                    headers: {
+                        Authorization: 'Bearer ' + this.token
+                    },
+                    data: {
+                        Id: Id,
+                        DeleteUserId: that.userId
+                    }
+                }).then(function (res) {
+                    console.log(res)
 
-            }).catch(function (error) {
-                that.$message.error("网络错误,请稍后重试");
-            });
+                    if (res.data.code == 200) {
+                        that.$message({
+                            message: '删除证件成功',
+                            type: 'success'
+                        });
+                    } else {
+                        that.$message.error('删除失败!');
+                    }
 
+                }).catch(function (error) {
+                    that.$message.error("网络错误,请稍后重试");
+                });
+            }
             this.customerCerts.splice(index, 1)
         },
         //添加工作经历
@@ -1210,35 +1272,37 @@ export default {
         },
         //删除工作经历表
         subworkExperience(index, Id) {
-            var url = "/api/CRM/DelVisaCustomerCompany"
-            var that = this
-            this.$axios({
-                method: 'post',
-                url: url,
-                headers: {
-                    Authorization: 'Bearer ' + this.token
-                },
-                data: {
-                    Id: Id,
-                    DeleteUserId: that.userId
-                }
-            }).then(function (res) {
-                console.log(res)
+            if (Id != 0) {
 
-                if (res.data.code == 200) {
-                    that.$message({
-                        message: '删除证件成功',
-                        type: 'success'
-                    });
-                } else {
-                    that.$message.error('删除失败!');
-                }
+                var url = "/api/CRM/DelVisaCustomerCompany"
+                var that = this
+                this.$axios({
+                    method: 'post',
+                    url: url,
+                    headers: {
+                        Authorization: 'Bearer ' + this.token
+                    },
+                    data: {
+                        Id: Id,
+                        DeleteUserId: that.userId
+                    }
+                }).then(function (res) {
+                    console.log(res)
 
-            }).catch(function (error) {
-                that.$message.error("网络错误,请稍后重试");
-            });
-            this.workExperience.splice(index, 1)
+                    if (res.data.code == 200) {
+                        that.$message({
+                            message: '删除证件成功',
+                            type: 'success'
+                        });
+                    } else {
+                        that.$message.error('删除失败!');
+                    }
 
+                }).catch(function (error) {
+                    that.$message.error("网络错误,请稍后重试");
+                });
+                this.workExperience.splice(index, 1)
+            }
         },
         //添加客户学历
         addcustomerSchool() {
@@ -1260,31 +1324,33 @@ export default {
         },
         //删除客户学历
         subcustomerSchool(index, Id) {
-            var url = "/api/CRM/DelCustomerSchool"
-            var that = this
-            this.$axios({
-                method: 'post',
-                url: url,
-                headers: {
-                    Authorization: 'Bearer ' + this.token
-                },
-                data: {
-                    Id: Id,
-                    DeleteUserId: that.userId
-                }
-            }).then(function (res) {
-                if (res.data.code == 200) {
-                    that.$message({
-                        message: '删除证件成功',
-                        type: 'success'
-                    });
-                } else {
-                    that.$message.error('删除失败!');
-                }
-            }).catch(function (error) {
-                that.$message.error("网络错误,请稍后重试");
-            });
+            if (Id != 0) {
 
+                var url = "/api/CRM/DelCustomerSchool"
+                var that = this
+                this.$axios({
+                    method: 'post',
+                    url: url,
+                    headers: {
+                        Authorization: 'Bearer ' + this.token
+                    },
+                    data: {
+                        Id: Id,
+                        DeleteUserId: that.userId
+                    }
+                }).then(function (res) {
+                    if (res.data.code == 200) {
+                        that.$message({
+                            message: '删除证件成功',
+                            type: 'success'
+                        });
+                    } else {
+                        that.$message.error('删除失败!');
+                    }
+                }).catch(function (error) {
+                    that.$message.error("网络错误,请稍后重试");
+                });
+            }
             this.customerSchool.splice(index, 1)
         }
     },
@@ -1294,6 +1360,7 @@ export default {
         this.Id = this.$route.query.id
         if (this.Id == 0 || this.Id == undefined) {
             this.Status = 1;
+            this.Id = 0;
             this.typeStr = "添加客户信息"
         } else {
             this.CustomerInfo();

+ 24 - 0
src/router/index.js

@@ -44,6 +44,10 @@ import DeleClient from '@/components/Crm/DeleClient';
 import Cost from '@/components/Finance/Cost';
 import MCR from '@/components/MCR/MarketCustomerResourcesHome';
 import MCROper from '@/components/MCR/MarketCustomerResourcesOperation';
+import OCRIdentify from '@/components/OP/OCRIdentify';
+import GroupsTaskAssignment from '@/components/OP/GroupsTaskAssignment';
+import DailyFeePayment from '@/components/Finance/DailyFeePayment';
+import DailyFeeedit from '@/components/Finance/DailyFeeedit';
 
 Vue.use(Router)
 
@@ -252,6 +256,26 @@ export default new Router({
           name: 'MCROper',
           component: MCROper
         },
+        {
+          path: '/home/OCRIdentify',
+          name: 'Cost',
+          component: OCRIdentify
+        },
+        {
+          path: '/home/GroupsTaskAssignment',
+          name: 'GroupsTaskAssignment',
+          component: GroupsTaskAssignment
+        },
+        {
+          path: '/home/DailyFeePayment',
+          name: 'DailyFeePayment',
+          component: DailyFeePayment
+        },
+        {
+          path: '/home/DailyFeeedit',
+          name: 'DailyFeeedit',
+          component: DailyFeeedit
+        },
       ]
     },
     {