Qukatie пре 3 недеља
родитељ
комит
d375b94e75

+ 5 - 0
src/views/iosBasicData/ComputationCenter/index.vue

@@ -252,6 +252,11 @@ export default {
             }
           },
           {
+            label: "来源类型",
+            prop: "srcType",
+            overHidden: true
+          },
+          {
             label: "业务类型",
             prop: "type",
             hide: true,

+ 2 - 2
src/views/iosBasicData/SeafreightExportF/bills/index.vue

@@ -586,7 +586,7 @@ export default {
           {
             label: "客户简称",
             prop: "corpCnName",
-            width: "160",
+            width: 160,
             overHidden: true,
             search: true,
             type: "select",
@@ -606,7 +606,7 @@ export default {
           {
             label: "客户英文",
             prop: "corpEnName",
-            width: "160",
+            width: 160,
             filterable: true,
             filters: true,
             sortable: true,

+ 82 - 88
src/views/iosBasicData/fininvoices/fininvoicesDetails.vue

@@ -651,91 +651,85 @@
           </div>
         </trade-card>
         <el-card style="margin-top: 10px">
-          <el-tabs v-model="detailTabs" type="card">
-            <el-tab-pane label="费用明细" name="first">
-              <el-tabs v-model="activeName" @tab-click="handleClick">
-                <el-tab-pane label="查询结果" name="1">
-                  <query-fininvoicesitems
-                    ref="fininvoicesitems"
-                    :queryData="queryData"
-                    :handleSelectionData="handleSelectionData"
-                    :editSave="editSave"
-                    :form="form"
-                    @handleSelectionChange="addSelectionChange"
-                    @deletefun="detailsdeletionfun"
-                  >
-                    <template slot="menuLeft">
-                      <div style="display: flex;">
-                        <el-button size="small" type="success" :disabled="statusType" :loading="saveLoading" @click="SelectedRows"
-                          >确认选定行</el-button
-                        >
-                      </div>
-                    </template>
-                  </query-fininvoicesitems>
-                </el-tab-pane>
-                <el-tab-pane label="选定数据" name="2">
-                  <fininvoicesitems
-                    ref="fininvoicesitems"
-                    :tableData="tableData"
-                    :form="form"
-                    :handleSelectionData="handleSelectionData"
-                    :editSave="editSave"
-                    @handleSelectionChange="handleSelectionChange"
-                    @deletefun="detailsdeletionfun"
-                  >
-                    <template slot="menuLeft">
-                      <div style="display: flex;">
-                        <search-query
-                          :datalist="serverData"
-                          :selectValue="form.serverName"
-                          :clearable="true"
-                          :buttonIf="false"
-                          :filterable="true"
-                          :forParameter="{ key: 'dictKey', label: 'dictValue', value: 'dictValue' }"
-                          placeholder="请选择开票项目"
-                          @corpChange="corpChange($event, 'serverName')"
-                          @corpFocus="serverWorkDictsfun"
-                        >
-                        </search-query>
-                        <el-button style="margin-left: 10px" :disabled="editSave" size="small" type="primary" @click="invoicingfun"
-                          >生成开票明细</el-button
-                        >
-                        <el-button style="margin-left: 10px" :disabled="editSave" size="small" type="warning" @click="invoicingRevokefun"
-                          >撤销开票明细</el-button
-                        >
-                        <el-button size="small" :disabled="editSave" type="danger" @click="batchDeletefun">一键删除</el-button>
-                        <el-input
-                          style="width: 10%;margin-left: 10px;"
-                          v-model="invoiceAmountCNY"
-                          size="small"
-                          autocomplete="off"
-                          type="numbers"
-                          clearable
-                          placeholder="开票金额"
-                        >
-                          <span style="line-height: 32px;" slot="suffix">CNY</span>
-                        </el-input>
-                        <el-input
-                          style="width: 10%;margin-left: 5px;"
-                          v-model="invoiceAmountUSD"
-                          size="small"
-                          autocomplete="off"
-                          type="numbers"
-                          clearable
-                          placeholder="开票金额"
-                        >
-                          <span style="line-height: 32px;" slot="suffix">USD</span>
-                        </el-input>
-                        <el-button style="margin-left: 10px" :disabled="statusType" size="small" type="primary" @click="invoiceMatchingfun()"
-                          >匹配金额</el-button
-                        >
-                      </div>
-                    </template>
-                  </fininvoicesitems>
-                </el-tab-pane>
-              </el-tabs>
+          <el-tabs v-model="activeName" @tab-click="handleClick">
+            <el-tab-pane label="查询结果" name="1">
+              <query-fininvoicesitems
+                ref="fininvoicesitems"
+                :queryData="queryData"
+                :handleSelectionData="handleSelectionData"
+                :editSave="editSave"
+                :form="form"
+                @handleSelectionChange="addSelectionChange"
+                @deletefun="detailsdeletionfun"
+              >
+                <template slot="menuLeft">
+                  <div style="display: flex;">
+                    <el-button size="small" type="success" :disabled="statusType" :loading="saveLoading" @click="SelectedRows">确认选定行</el-button>
+                  </div>
+                </template>
+              </query-fininvoicesitems>
+            </el-tab-pane>
+            <el-tab-pane label="选定数据" name="2">
+              <fininvoicesitems
+                ref="fininvoicesitems"
+                :tableData="tableData"
+                :form="form"
+                :handleSelectionData="handleSelectionData"
+                :editSave="editSave"
+                @handleSelectionChange="handleSelectionChange"
+                @deletefun="detailsdeletionfun"
+              >
+                <template slot="menuLeft">
+                  <div style="display: flex;">
+                    <search-query
+                      :datalist="serverData"
+                      :selectValue="form.serverName"
+                      :clearable="true"
+                      :buttonIf="false"
+                      :filterable="true"
+                      :forParameter="{ key: 'dictKey', label: 'dictValue', value: 'dictValue' }"
+                      placeholder="请选择开票项目"
+                      @corpChange="corpChange($event, 'serverName')"
+                      @corpFocus="serverWorkDictsfun"
+                    >
+                    </search-query>
+                    <el-button style="margin-left: 10px" :disabled="editSave" size="small" type="primary" @click="invoicingfun"
+                      >生成开票明细</el-button
+                    >
+                    <el-button style="margin-left: 10px" :disabled="editSave" size="small" type="warning" @click="invoicingRevokefun"
+                      >撤销开票明细</el-button
+                    >
+                    <el-button size="small" :disabled="editSave" type="danger" @click="batchDeletefun">一键删除</el-button>
+                    <el-input
+                      style="width: 10%;margin-left: 10px;"
+                      v-model="invoiceAmountCNY"
+                      size="small"
+                      autocomplete="off"
+                      type="numbers"
+                      clearable
+                      placeholder="开票金额"
+                    >
+                      <span style="line-height: 32px;" slot="suffix">CNY</span>
+                    </el-input>
+                    <el-input
+                      style="width: 10%;margin-left: 5px;"
+                      v-model="invoiceAmountUSD"
+                      size="small"
+                      autocomplete="off"
+                      type="numbers"
+                      clearable
+                      placeholder="开票金额"
+                    >
+                      <span style="line-height: 32px;" slot="suffix">USD</span>
+                    </el-input>
+                    <el-button style="margin-left: 10px" :disabled="statusType" size="small" type="primary" @click="invoiceMatchingfun()"
+                      >匹配金额</el-button
+                    >
+                  </div>
+                </template>
+              </fininvoicesitems>
             </el-tab-pane>
-            <el-tab-pane label="开票明细" name="second">
+            <el-tab-pane label="开票明细" name="3">
               <div style="margin-bottom: 10px;display: flex;">
                 <el-button size="small" :disabled="editSave" type="danger" @click="invoicingBatchDelete">一键删除</el-button>
               </div>
@@ -831,7 +825,7 @@ import dicSelect from "@/components/dicSelect/main";
 import { getMonthDate, getYearDate } from "@/util/date";
 import { bcurexrateList } from "@/api/iosBasicData/rateManagement";
 export default {
-  components: { SearchQuery, fininvoicesitems, fininvoiceitemdetail, dicSelect,queryFininvoicesitems },
+  components: { SearchQuery, fininvoicesitems, fininvoiceitemdetail, dicSelect, queryFininvoicesitems },
   data() {
     return {
       activeName: "1",
@@ -1066,7 +1060,7 @@ export default {
         this.$message.warning("操作成功");
         this.fininvoicesDetailfun(this.form.id);
       });
-      this.detailTabs = "second";
+      this.activeName = "3";
     },
     // 撤销开票信息
     invoicingRevokefun() {
@@ -1388,7 +1382,7 @@ export default {
           this.form.businessDateEnd = this.form.businessDateEnd.slice(0, 10) + " 00:00:00";
         }
         if (this.form.id) {
-           if (this.addData.length) {
+          if (this.addData.length) {
             this.form.finInvoicesItemsList = this.addData.map(item => {
               if (item.currentCurCode == "CNY") {
                 item.currentAmount = item.currentAmountCNY;
@@ -1441,7 +1435,7 @@ export default {
               this.saveLoading = false;
             });
         } else {
-          this.fininvoicesSubmitfun(this.form,type);
+          this.fininvoicesSubmitfun(this.form, type);
         }
       });
     },

+ 289 - 271
src/views/iosBasicData/fininvoicesApplyfor/assembly/fininvoiceitemdetail.vue

@@ -1,286 +1,304 @@
 <template>
   <div>
-      <el-table
-          ref="tableRef"
-          :cell-style="{padding:'0px',fontSize:'12px'}"
-          :header-cell-style="tableHeaderCellStyle"
-          :data="tableData"
-          border
-          style="width: 100%"
-          @selection-change="handleSelectionChange"
-          @row-click="rowClick"
-          :row-style="rowStyle"
-          :row-class-name="rowClassName" >
-          <el-table-column fixed="left" type="selection" width="55" />
-          <el-table-column prop="index" label="行号" width="50px" >
-              <template slot-scope="scope">
-                  <span>{{Number(scope.$index) + 1}}</span>
-              </template>
-          </el-table-column>
-          <el-table-column prop="serverName" label="项目名称" width="140px" >
-              <template slot-scope="{ row }">
-                  <search-query v-if="row.edit"
-                                :datalist="serverData"
-                                :selectValue="row.serverName"
-                                :clearable="true"
-                                :buttonIf="false"
-                                :filterable="true"
-                                size="mini"
-                                :forParameter="{key:'dictKey',label:'dictValue',value:'dictValue'}"
-                                placeholder="请选择项目名称"
-                                @corpChange="corpChange($event,'serverName')"
-                                @corpFocus="serverWorkDictsfun" >
-                  </search-query>
-                  <span v-else>{{row.serverName}}</span>
-              </template>
-          </el-table-column>
-          <el-table-column prop="typeno" label="规格型号" >
-              <template slot-scope="{ row }">
-                  <el-input v-if="row.edit" style="width: 100%;" v-model="row.typeno"
-                            size="mini" autocomplete="off"
-                            clearable placeholder="请输入规格型号" >
-                  </el-input>
-                  <span v-else>{{row.typeno}}</span>
-              </template>
-          </el-table-column>
-          <el-table-column prop="unit" label="单位" width="100px" >
-              <template slot-scope="{ row }">
-                  <search-query v-if="row.edit"
-                                :datalist="unitData"
-                                :selectValue="row.unit"
-                                :clearable="true"
-                                :buttonIf="false"
-                                :filterable="true"
-                                size="mini"
-                                :forParameter="{key:'dictKey',label:'dictValue',value:'dictValue'}"
-                                placeholder="请选择单位"
-                                @corpChange="corpChange($event,'unit',row)"
-                                @corpFocus="unitWorkDictsfun" >
-                  </search-query>
-                  <span v-else>{{row.unit}}</span>
-              </template>
-          </el-table-column>
-          <el-table-column prop="number" label="数量" width="100px" >
-              <template slot-scope="{ row }">
-                  <el-input v-if="row.edit" style="width: 100%;" v-model="row.number"
-                            size="mini" autocomplete="off"
-                            clearable placeholder="请输入数量" >
-                  </el-input>
-                  <span v-else>{{row.number}}</span>
-              </template>
-          </el-table-column>
-          <el-table-column prop="price" label="单价(含税)" >
-              <template slot-scope="{ row }">
-                  <el-input v-if="row.edit" style="width: 100%;" v-model="row.price"
-                            size="mini" autocomplete="off"
-                            clearable placeholder="请输入单价" >
-                  </el-input>
-                  <span v-else>{{row.price}}</span>
-              </template>
-          </el-table-column>
-          <el-table-column prop="amount" label="金额(含税)" >
-              <template slot-scope="{ row }">
-                  <el-input v-if="row.edit" style="width: 100%;" v-model="row.amount"
-                            size="mini" autocomplete="off"
-                            clearable placeholder="请输入金额" @input="amountInput(row)" >
-                  </el-input>
-                  <span v-else>{{row.amount}}</span>
-              </template>
-          </el-table-column>
-          <el-table-column prop="amountRate" label="税率(%)" />
-          <el-table-column prop="amountTax" label="税额" />
-          <el-table-column
-              fixed="right"
-              label="操作"
-              width="100">
-              <template slot-scope="scope">
-                  <el-button v-if="scope.row.edit" :disabled="editSave" type="text" size="small" @click="savefun(scope.row,scope.index)">保存</el-button>
-                  <el-button v-else type="text" :disabled="editSave" size="small" @click="editfun(scope.row,scope.index)" >编辑</el-button>
-                  <el-button type="text" :disabled="editSave" size="small" @click="deletefun(scope.row,scope.index)" >删除</el-button>
-              </template>
-          </el-table-column>
-      </el-table>
+    <el-table
+      ref="tableRef"
+      :cell-style="{ padding: '0px', fontSize: '12px' }"
+      :header-cell-style="tableHeaderCellStyle"
+      :data="tableData"
+      border
+      style="width: 100%"
+      @selection-change="handleSelectionChange"
+      @row-click="rowClick"
+      :row-style="rowStyle"
+      :row-class-name="rowClassName"
+    >
+      <el-table-column fixed="left" type="selection" width="55" />
+      <el-table-column prop="index" label="行号" width="50px">
+        <template slot-scope="scope">
+          <span>{{ Number(scope.$index) + 1 }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="serverName" label="项目名称" width="140px">
+        <template slot-scope="{ row }">
+          <search-query
+            v-if="row.edit"
+            :datalist="serverData"
+            :selectValue="row.serverName"
+            :clearable="true"
+            :buttonIf="false"
+            :filterable="true"
+            size="mini"
+            :forParameter="{ key: 'dictKey', label: 'dictValue', value: 'dictValue' }"
+            placeholder="请选择项目名称"
+            @corpChange="corpChange($event, 'serverName')"
+            @corpFocus="serverWorkDictsfun"
+          >
+          </search-query>
+          <span v-else>{{ row.serverName }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="typeno" label="规格型号">
+        <template slot-scope="{ row }">
+          <el-input v-if="row.edit" style="width: 100%;" v-model="row.typeno" size="mini" autocomplete="off" clearable placeholder="请输入规格型号">
+          </el-input>
+          <span v-else>{{ row.typeno }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="unit" label="单位" width="100px">
+        <template slot-scope="{ row }">
+          <search-query
+            v-if="row.edit"
+            :datalist="unitData"
+            :selectValue="row.unit"
+            :clearable="true"
+            :buttonIf="false"
+            :filterable="true"
+            size="mini"
+            :forParameter="{ key: 'dictKey', label: 'dictValue', value: 'dictValue' }"
+            placeholder="请选择单位"
+            @corpChange="corpChange($event, 'unit', row)"
+            @corpFocus="unitWorkDictsfun"
+          >
+          </search-query>
+          <span v-else>{{ row.unit }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="number" label="数量" width="100px">
+        <template slot-scope="{ row }">
+          <el-input v-if="row.edit" style="width: 100%;" v-model="row.number" size="mini" autocomplete="off" clearable placeholder="请输入数量">
+          </el-input>
+          <span v-else>{{ row.number }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="price" label="单价(含税)">
+        <template slot-scope="{ row }">
+          <el-input v-if="row.edit" style="width: 100%;" v-model="row.price" size="mini" autocomplete="off" clearable placeholder="请输入单价">
+          </el-input>
+          <span v-else>{{ row.price }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="amount" label="金额(含税)">
+        <template slot-scope="{ row }">
+          <el-input
+            v-if="row.edit"
+            style="width: 100%;"
+            v-model="row.amount"
+            size="mini"
+            autocomplete="off"
+            clearable
+            placeholder="请输入金额"
+            @input="amountInput(row)"
+          >
+          </el-input>
+          <span v-else>{{ row.amount }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="amountRate" label="税率(%)">
+        <template slot-scope="{ row }">
+          <el-input-number v-if="row.edit" style="width: 100%;" v-model="row.amountRate" :controls="false" size="mini" autocomplete="off" clearable placeholder="请输入税率">
+          </el-input-number>
+          <span v-else>{{ row.amountRate }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="remarks" label="税额" />
+      <el-table-column prop="remarks" label="备注">
+        <template slot-scope="{ row }">
+          <el-input v-if="row.edit" style="width: 100%;" v-model="row.remarks" size="mini" autocomplete="off" clearable placeholder="请输入税率">
+          </el-input>
+          <span v-else>{{ row.remarks }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column fixed="right" label="操作" width="100">
+        <template slot-scope="scope">
+          <el-button v-if="scope.row.edit" :disabled="editSave" type="text" size="small" @click="savefun(scope.row, scope.index)">保存</el-button>
+          <el-button v-else type="text" :disabled="editSave" size="small" @click="editfun(scope.row, scope.index)">编辑</el-button>
+          <el-button type="text" :disabled="editSave" size="small" @click="deletefun(scope.row, scope.index)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
   </div>
 </template>
 
 <script>
-  import SearchQuery from "@/components/iosbasic-data/searchquery.vue";
-  import {getWorkDicts} from "@/api/system/dictbiz";
-  import {fininvoiceitemdetailSubmit} from "@/api/iosBasicData/fininvoices";
+import SearchQuery from "@/components/iosbasic-data/searchquery.vue";
+import { getWorkDicts } from "@/api/system/dictbiz";
+import { fininvoiceitemdetailSubmit } from "@/api/iosBasicData/fininvoices";
 
-  export default {
-      components: {SearchQuery},
-      props:{
-          tableData:{
-              type:Array,
-              default:[]
-          },
-          handleSelectionData:{
-              type:Array,
-              default:[],
-          },
-          editSave:{
-              type:Boolean,
-              default:false,
-          },
-      },
-    data() {
-      return {
-          serverData:[], // 项目名称字典数据
-          unitData:[], // 单位字典数据
-      };
+export default {
+  components: { SearchQuery },
+  props: {
+    tableData: {
+      type: Array,
+      default: []
     },
-    methods: {
-        // 修改金额的回调
-        amountInput(row){
-            // amountTax
-        },
-        // 下拉回调
-        corpChange(value,name,row){
-            this.$set(row,name,value)
-        },
-        // 保存
-        savefun(row){
-            this.$emit('savefun',row)
-        },
-        // 编辑
-        editfun(row){
-            this.$set(row,'edit',true)
-        },
-        // 删除
-        deletefun(row,index){
-            this.$emit('deletefun',row.id,index)
-        },
-        // 项目名称字典数据
-        serverWorkDictsfun(){
-            getWorkDicts('Invoice_information_los').then(res=>{
-                this.serverData = res.data.data;
-            })
-        },
-        // 获取单位字典数据
-        unitWorkDictsfun(){
-            getWorkDicts('Invoice_Items_unit_los').then(res=>{
-                this.unitData = res.data.data;
-            })
-        },
-        // 表头样式
-        tableHeaderCellStyle({row,column,rowIndex, columnIndex}){
-            return "padding:4px 0px;fontSize:12px;color:#000;background:#ecf5ff"
-        },
-        // 多选选择的数据
-        handleSelectionChange(arr){
-            this.$emit('handleSelectionChange',arr)
-        },
-        // 监听点击表格事件
-        rowClick(row, column, event) {
-            let refsElTable = this.$refs.tableRef; // 获取表格对象
-            if (this.CtrlDown) {
-                refsElTable.toggleRowSelection(row); // ctrl多选 如果点击两次同样会取消选中
-                return;
-            }
-            if ( this.shiftOrAltDown && this.handleSelectionData.length > 0) {
-                // 通过rowIndex判断已选择的行中最上面和最下面的是哪行,再对比按住shift/alt点击的当前行得到新的最上面和最下面的行,把这两行中间的行进行循环选中。
-                let topAndBottom = this.getTopAndBottom(  row, this.bottomSelectionRow, this.topSelectionRow );
-                refsElTable.clearSelection(); //先清空 不然会导致在这两行中间之外的行状态不变
-                for (let index = topAndBottom.top; index <= topAndBottom.bottom; index++) { //选中两行之间的所有行
-                    refsElTable.toggleRowSelection(this.tableData[index], true);
-                }
-            } else {
-                let findRow = this.handleSelectionData.find(c => c.rowIndex == row.rowIndex); //找出当前选中行
-                //如果只有一行且点击的也是这一行则取消选择 否则清空再选中当前点击行
-                if (findRow&& this.handleSelectionData.length === 1 ) {
-                    refsElTable.toggleRowSelection(row, false);
-                    return;
-                }
-                // refsElTable.clearSelection(); // 清空之前选择的数据(如果放开,选择之前会变成单选)
-                refsElTable.toggleRowSelection(row); // 调用选中行方法
-            }
-        },
-        // 行的 style 的回调方法
-        rowStyle({row,rowIndex}) {
-            // 直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象
-            // object: 要添加或者修改属性的目标对象;prop: 要定义或修改属性的名称;descript: 是一个对象,里面是我们上述的对象属性的特性;
-            Object.defineProperty(row, 'rowIndex', { //给每一行添加不可枚举属性rowIndex来标识当前行
-                value: rowIndex, // 设置age的值,不设置的话默认为undefined
-                writable: true, // 表示属性的值true可以修改,false不可以被修改
-                enumerable: false, // 设置为false表示不能通过 for-in 循环返回
-                // configurable: false, // configurable 设置为 false,意味着这个属性不能从对象上删除
-            })
-        },
-        keyDown(event) {
-            let key = event.keyCode;
-            if (key == 17) this.CtrlDown = true;
-            if (key == 16 || key == 18) this.shiftOrAltDown = true;
-        },
-        keyUp(event) {
-            let key = event.keyCode;
-            if (key == 17) this.CtrlDown = false;
-            if (key == 16 || key == 18) this.shiftOrAltDown = false;
-        },
-        // 文章说明 https://www.jianshu.com/p/48f2c522d2a2
-        getTopAndBottom(row, bottom, top){
-            let n = row.rowIndex,
-                mx = bottom.rowIndex,
-                mi = top.rowIndex;
-            if (n > mx) {
-                return {
-                    top: mi,
-                    bottom: n
-                };
-            } else if (n < mx && n > mi) {
-                return {
-                    top: mi,
-                    bottom: n
-                };
-            } else if (n < mi) {
-                return {
-                    top: n,
-                    bottom: mx
-                };
-            } else if (n == mi || n == mx) {
-                return {
-                    top: mi,
-                    bottom: mx
-                };
-            }
-        },
-        // 给选中行加上current-row这个class类,所以要使用row-class-name这个属性(其实给每一行添加rowIndex也可以用这个属性),
-        // 判断方式也是通过判断rowIndex对比
-        rowClassName({ row,  rowIndex }) {
-            let rowName = "",
-                findRow = this.handleSelectionData.find(c => c.rowIndex === row.rowIndex);
-            if (findRow) {
-                rowName = "current-row "; // elementUI 默认高亮行的class类 不用再样式了^-^,也可通过css覆盖改变背景颜色
-            }
-            return rowName; //也可以再加上其他类名 如果有需求的话
-        },
+    handleSelectionData: {
+      type: Array,
+      default: []
     },
-    mounted() {
-        // 按住ctrl实现多选 设置监听keydown事件,以及keyup事件,
-        addEventListener("keydown", this.keyDown, false);
-        addEventListener("keyup", this.keyUp, false);
+    editSave: {
+      type: Boolean,
+      default: false
+    }
+  },
+  data() {
+    return {
+      serverData: [], // 项目名称字典数据
+      unitData: [] // 单位字典数据
+    };
+  },
+  methods: {
+    // 修改金额的回调
+    amountInput(row) {
+      // amountTax
     },
-    beforeDestroy() { //解绑
-        removeEventListener("keydown", this.keyDown);
-        removeEventListener("keyup", this.keyUp);
+    // 下拉回调
+    corpChange(value, name, row) {
+      this.$set(row, name, value);
     },
-    computed: { //实时得到最上行和最下行
-        bottomSelectionRow() {
-            if (this.handleSelectionData.length == 0) return null;
-            return this.handleSelectionData.reduce((start, end) => {
-                return start.rowIndex > end.rowIndex ? start : end;
-            });
-        },
-        topSelectionRow() {
-            if (this.handleSelectionData.length == 0) return null;
-            return this.handleSelectionData.reduce((start, end) => {
-                return start.rowIndex < end.rowIndex ? start : end;
-            });
+    // 保存
+    savefun(row) {
+      this.$emit("savefun", row);
+    },
+    // 编辑
+    editfun(row) {
+      this.$set(row, "edit", true);
+    },
+    // 删除
+    deletefun(row, index) {
+      this.$emit("deletefun", row.id, index);
+    },
+    // 项目名称字典数据
+    serverWorkDictsfun() {
+      getWorkDicts("Invoice_information_los").then(res => {
+        this.serverData = res.data.data;
+      });
+    },
+    // 获取单位字典数据
+    unitWorkDictsfun() {
+      getWorkDicts("Invoice_Items_unit_los").then(res => {
+        this.unitData = res.data.data;
+      });
+    },
+    // 表头样式
+    tableHeaderCellStyle({ row, column, rowIndex, columnIndex }) {
+      return "padding:4px 0px;fontSize:12px;color:#000;background:#ecf5ff";
+    },
+    // 多选选择的数据
+    handleSelectionChange(arr) {
+      this.$emit("handleSelectionChange", arr);
+    },
+    // 监听点击表格事件
+    rowClick(row, column, event) {
+      let refsElTable = this.$refs.tableRef; // 获取表格对象
+      if (this.CtrlDown) {
+        refsElTable.toggleRowSelection(row); // ctrl多选 如果点击两次同样会取消选中
+        return;
+      }
+      if (this.shiftOrAltDown && this.handleSelectionData.length > 0) {
+        // 通过rowIndex判断已选择的行中最上面和最下面的是哪行,再对比按住shift/alt点击的当前行得到新的最上面和最下面的行,把这两行中间的行进行循环选中。
+        let topAndBottom = this.getTopAndBottom(row, this.bottomSelectionRow, this.topSelectionRow);
+        refsElTable.clearSelection(); //先清空 不然会导致在这两行中间之外的行状态不变
+        for (let index = topAndBottom.top; index <= topAndBottom.bottom; index++) {
+          //选中两行之间的所有行
+          refsElTable.toggleRowSelection(this.tableData[index], true);
         }
+      } else {
+        let findRow = this.handleSelectionData.find(c => c.rowIndex == row.rowIndex); //找出当前选中行
+        //如果只有一行且点击的也是这一行则取消选择 否则清空再选中当前点击行
+        if (findRow && this.handleSelectionData.length === 1) {
+          refsElTable.toggleRowSelection(row, false);
+          return;
+        }
+        // refsElTable.clearSelection(); // 清空之前选择的数据(如果放开,选择之前会变成单选)
+        refsElTable.toggleRowSelection(row); // 调用选中行方法
+      }
+    },
+    // 行的 style 的回调方法
+    rowStyle({ row, rowIndex }) {
+      // 直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象
+      // object: 要添加或者修改属性的目标对象;prop: 要定义或修改属性的名称;descript: 是一个对象,里面是我们上述的对象属性的特性;
+      Object.defineProperty(row, "rowIndex", {
+        //给每一行添加不可枚举属性rowIndex来标识当前行
+        value: rowIndex, // 设置age的值,不设置的话默认为undefined
+        writable: true, // 表示属性的值true可以修改,false不可以被修改
+        enumerable: false // 设置为false表示不能通过 for-in 循环返回
+        // configurable: false, // configurable 设置为 false,意味着这个属性不能从对象上删除
+      });
+    },
+    keyDown(event) {
+      let key = event.keyCode;
+      if (key == 17) this.CtrlDown = true;
+      if (key == 16 || key == 18) this.shiftOrAltDown = true;
+    },
+    keyUp(event) {
+      let key = event.keyCode;
+      if (key == 17) this.CtrlDown = false;
+      if (key == 16 || key == 18) this.shiftOrAltDown = false;
     },
-  };
+    // 文章说明 https://www.jianshu.com/p/48f2c522d2a2
+    getTopAndBottom(row, bottom, top) {
+      let n = row.rowIndex,
+        mx = bottom.rowIndex,
+        mi = top.rowIndex;
+      if (n > mx) {
+        return {
+          top: mi,
+          bottom: n
+        };
+      } else if (n < mx && n > mi) {
+        return {
+          top: mi,
+          bottom: n
+        };
+      } else if (n < mi) {
+        return {
+          top: n,
+          bottom: mx
+        };
+      } else if (n == mi || n == mx) {
+        return {
+          top: mi,
+          bottom: mx
+        };
+      }
+    },
+    // 给选中行加上current-row这个class类,所以要使用row-class-name这个属性(其实给每一行添加rowIndex也可以用这个属性),
+    // 判断方式也是通过判断rowIndex对比
+    rowClassName({ row, rowIndex }) {
+      let rowName = "",
+        findRow = this.handleSelectionData.find(c => c.rowIndex === row.rowIndex);
+      if (findRow) {
+        rowName = "current-row "; // elementUI 默认高亮行的class类 不用再样式了^-^,也可通过css覆盖改变背景颜色
+      }
+      return rowName; //也可以再加上其他类名 如果有需求的话
+    }
+  },
+  mounted() {
+    // 按住ctrl实现多选 设置监听keydown事件,以及keyup事件,
+    addEventListener("keydown", this.keyDown, false);
+    addEventListener("keyup", this.keyUp, false);
+  },
+  beforeDestroy() {
+    //解绑
+    removeEventListener("keydown", this.keyDown);
+    removeEventListener("keyup", this.keyUp);
+  },
+  computed: {
+    //实时得到最上行和最下行
+    bottomSelectionRow() {
+      if (this.handleSelectionData.length == 0) return null;
+      return this.handleSelectionData.reduce((start, end) => {
+        return start.rowIndex > end.rowIndex ? start : end;
+      });
+    },
+    topSelectionRow() {
+      if (this.handleSelectionData.length == 0) return null;
+      return this.handleSelectionData.reduce((start, end) => {
+        return start.rowIndex < end.rowIndex ? start : end;
+      });
+    }
+  }
+};
 </script>
 
-<style scoped>
-
-</style>
+<style scoped></style>

+ 16 - 20
src/views/iosBasicData/fininvoicesApplyfor/fininvoicesDetails.vue

@@ -645,9 +645,7 @@
           </div>
         </trade-card>
         <el-card style="margin-top: 10px">
-          <el-tabs v-model="detailTabs" type="card">
-            <el-tab-pane label="费用明细" name="first">
-              <el-tabs v-model="activeName" @tab-click="handleClick">
+                  <el-tabs v-model="activeName" @tab-click="handleClick">
                 <el-tab-pane label="查询结果" name="1">
                   <query-fininvoicesitems
                     ref="fininvoicesitems"
@@ -737,22 +735,20 @@
                     </template>
                   </fininvoicesitems>
                 </el-tab-pane>
+                <el-tab-pane label="开票明细" name="3">
+                  <div style="margin-bottom: 10px;display: flex;">
+                    <el-button :disabled="statusType" size="small" type="danger" @click="invoicingBatchDelete">一键删除</el-button>
+                  </div>
+                  <fininvoiceitemdetail
+                    :tableData="InvoicingList"
+                    :handleSelectionData="invoicingCheckboxData"
+                    @handleSelectionChange="invoicingCheckboxChange"
+                    @deletefun="invoiceDeletionfun"
+                    @savefun="invoiceSavefun"
+                  >
+                  </fininvoiceitemdetail>
+                </el-tab-pane>
               </el-tabs>
-            </el-tab-pane>
-            <el-tab-pane label="开票明细" name="second">
-              <div style="margin-bottom: 10px;display: flex;">
-                <el-button :disabled="statusType" size="small" type="danger" @click="invoicingBatchDelete">一键删除</el-button>
-              </div>
-              <fininvoiceitemdetail
-                :tableData="InvoicingList"
-                :handleSelectionData="invoicingCheckboxData"
-                @handleSelectionChange="invoicingCheckboxChange"
-                @deletefun="invoiceDeletionfun"
-                @savefun="invoiceSavefun"
-              >
-              </fininvoiceitemdetail>
-            </el-tab-pane>
-          </el-tabs>
         </el-card>
         <el-card class="box-card" style="margin-top: 10px">
           <el-row>
@@ -1106,7 +1102,7 @@ export default {
   },
   methods: {
     SelectedRows() {
-      if(this.addData.length==0){
+      if (this.addData.length == 0) {
         return this.$message.error("请选择明细");
       }
       this.editCustomer("选定行");
@@ -1264,7 +1260,7 @@ export default {
         this.$message.warning("操作成功");
         this.fininvoicesDetailfun(this.form.id);
       });
-      this.detailTabs = "second";
+      this.activeName = "3";
     },
     // 撤销开票信息
     invoicingRevokefun() {

+ 4 - 8
src/views/iosBasicData/fininvoicesOutput/fininvoicesDetails.vue

@@ -685,9 +685,7 @@
           </div>
         </trade-card>
         <el-card style="margin-top: 10px">
-          <el-tabs v-model="detailTabs" type="card" @tab-click="handleClick">
-            <el-tab-pane label="费用明细" name="first">
-              <el-tabs v-model="activeName" @tab-click="handleClick">
+         <el-tabs v-model="activeName" @tab-click="handleClick">
                 <el-tab-pane label="查询结果" name="1">
                   <query-fininvoicesitems
                     ref="fininvoicesitems"
@@ -780,9 +778,7 @@
                     </template>
                   </fininvoicesitems>
                 </el-tab-pane>
-              </el-tabs>
-            </el-tab-pane>
-            <el-tab-pane label="开票明细" name="second">
+                <el-tab-pane label="开票明细" name="3">
               <div style="margin-bottom: 10px;display: flex;">
                 <el-button size="small" :disabled="editSave" type="danger" @click="invoicingBatchDelete">一键删除</el-button>
                 <span style="font-size: 18px;font-weight: 600;margin-left: 100px;">
@@ -798,7 +794,7 @@
               >
               </fininvoiceitemdetail>
             </el-tab-pane>
-          </el-tabs>
+              </el-tabs>
         </el-card>
         <el-card class="box-card" style="margin-top: 10px">
           <el-row>
@@ -1209,7 +1205,7 @@ export default {
         this.$message.warning("操作成功");
         this.fininvoicesDetailfun(this.form.id);
       });
-      this.detailTabs = "second";
+      this.activeName = "3";
     },
     // 撤销开票信息
     invoicingRevokefun() {