ソースを参照

Merge remote-tracking branch 'origin/master'

humingbo 1 年間 前
コミット
423f665cc5

+ 6 - 6
src/components/Breadcrumb/index.vue

@@ -3,7 +3,7 @@
     <transition-group name="breadcrumb">
       <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
         <span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">{{ item.meta.title }}</span>
-        <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
+<!--        <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>-->
       </el-breadcrumb-item>
     </transition-group>
   </el-breadcrumb>
@@ -32,9 +32,9 @@ export default {
       let matched = this.$route.matched.filter(item => item.meta && item.meta.title)
       const first = matched[0]
 
-      if (!this.isDashboard(first)) {
-        matched = [{ path: '/dashboard', meta: { title: 'Dashboard' }}].concat(matched)
-      }
+      // if (!this.isDashboard(first)) {
+      //   matched = [{ path: '/dashboard', meta: { title: 'Dashboard' }}].concat(matched)
+      // }
 
       this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
     },
@@ -47,12 +47,12 @@ export default {
     },
     pathCompile(path) {
       // To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561
-      const { params } = this.$route
+      const {params} = this.$route
       var toPath = pathToRegexp.compile(path)
       return toPath(params)
     },
     handleLink(item) {
-      const { redirect, path } = item
+      const {redirect, path} = item
       if (redirect) {
         this.$router.push(redirect)
         return

+ 24 - 7
src/views/material/officeSupply.vue

@@ -134,7 +134,10 @@
             <span style="color: red">*</span><span>物品名称</span>
           </template>
           <template slot-scope="scope">
-            <el-input v-model="scope.row.officeSupplyName" size="mini" placeholder="请输入物品名称"/>
+            <el-input v-model="scope.row.officeSupplyName"
+                      :ref="'r'+scope.$index+'officeSupplyName'"
+                      @keyup.native="handleKeyDown($event,  scope)" size="mini"
+                      placeholder="请输入物品名称"/>
           </template>
         </el-table-column>
         <el-table-column label="规格/货号" prop="specification">
@@ -142,7 +145,10 @@
             <span style="color: red">*</span><span>规格/货号</span>
           </template>
           <template slot-scope="scope">
-            <el-input v-model="scope.row.specification" size="mini" placeholder="请输入规格/货号"/>
+            <el-input v-model="scope.row.specification"
+                      :ref="'r'+scope.$index+'specification'"
+                      @keyup.native="handleKeyDown($event, scope)" size="mini"
+                      placeholder="请输入规格/货号"/>
           </template>
         </el-table-column>
         <el-table-column label="单位" prop="unit" width="120px">
@@ -152,6 +158,8 @@
           <template slot-scope="scope">
             <el-select
               v-model="scope.row.unit"
+              :ref="'r'+scope.$index+'unit'"
+              @keyup.native="handleKeyDown($event, scope,'select')"
               filterable
               allow-create
               default-first-option
@@ -166,7 +174,9 @@
         </el-table-column>
         <el-table-column label="价格" prop="price" width="120px">
           <template slot-scope="scope">
-            <el-input v-model="scope.row.price" size="mini" placeholder="请输入价格"/>
+            <el-input v-model="scope.row.price" :ref="'r'+scope.$index+'price'"
+                      @keyup.native="handleKeyDown($event, scope)"
+                      size="mini" placeholder="请输入价格"/>
           </template>
         </el-table-column>
         <el-table-column label="数量" prop="num" width="100px">
@@ -174,13 +184,18 @@
             <span style="color: red">*</span><span>数量</span>
           </template>
           <template slot-scope="scope">
-            <el-input-number v-model="scope.row.num" size="mini" controls-position="right" :min="0"
+            <el-input-number v-model="scope.row.num"
+                             :ref="'r'+scope.$index+'num'"
+                             @keyup.native="handleKeyDown($event, scope)" size="mini"
+                             controls-position="right" :min="0"
                              placeholder="请输入数量" style="width: 100%"/>
           </template>
         </el-table-column>
-        <el-table-column label="备注">
+        <el-table-column label="备注" prop="remark">
           <template slot-scope="scope">
-            <el-input v-model="scope.row.remark" size="mini" type="textarea" autosize/>
+            <el-input v-model="scope.row.remark" :ref="'r'+scope.$index+'remark'"
+                      @keyup.native="handleKeyDown($event, scope)"
+                      size="mini" type="textarea" autosize/>
           </template>
         </el-table-column>
         <el-table-column width="50">
@@ -262,9 +277,11 @@ import {
   exportOfficeSupply
 } from "@/api/material/office";
 import DateUtil from "@/utils/date"
+import directionKey from "@/views/mixins/directionKey";
 
 export default {
   name: "officeSupply",
+  mixins: [directionKey],
   data() {
     return {
       // 总条数
@@ -324,7 +341,7 @@ export default {
           {required: true, message: "数量不能为空", trigger: "blur"}
         ]
       },
-
+      labelArr: ['officeSupplyName', 'specification', 'unit', 'price', 'num', 'remark'],
       pickerOptions: {
         disabledDate(time) {
           return time.getTime() < DateUtil.unix(DateUtil.afterMonth()) * 1000

+ 26 - 11
src/views/material/receive.vue

@@ -186,7 +186,8 @@
             <span style="color: red">*</span><span>物料名称</span>
           </template>
           <template slot-scope="scope">
-            <el-input v-model="scope.row.materialName" size="mini" placeholder="请输入物料名称"
+            <el-input v-model="scope.row.materialName" :ref="'r'+scope.$index+'materialName'"
+                      @keyup.native="handleKeyDown($event, scope)" size="mini" placeholder="请输入物料名称"
                       :disabled="addForm.monthOrWeek==='2'"/>
           </template>
         </el-table-column>
@@ -195,7 +196,8 @@
             <span style="color: red">*</span><span>规格</span>
           </template>
           <template slot-scope="scope">
-            <el-input v-model="scope.row.specification" size="mini" placeholder="请输入物料规格"
+            <el-input v-model="scope.row.specification" :ref="'r'+scope.$index+'specification'"
+                      @keyup.native="handleKeyDown($event, scope)" size="mini" placeholder="请输入物料规格"
                       :disabled="addForm.monthOrWeek==='2'"/>
           </template>
         </el-table-column>
@@ -204,7 +206,8 @@
             <span style="color: red">*</span><span>品牌/货号</span>
           </template>
           <template slot-scope="scope">
-            <el-input v-model="scope.row.articleNo" size="mini" placeholder="请输入品牌/货号"
+            <el-input v-model="scope.row.articleNo" :ref="'r'+scope.$index+'articleNo'"
+                      @keyup.native="handleKeyDown($event, scope)" size="mini" placeholder="请输入品牌/货号"
                       :disabled="addForm.monthOrWeek==='2'"/>
           </template>
         </el-table-column>
@@ -213,7 +216,8 @@
             <span style="color: red">*</span><span>厂商</span>
           </template>
           <template slot-scope="scope">
-            <el-input v-model="scope.row.factory" size="mini" placeholder="请输入厂商"
+            <el-input v-model="scope.row.factory" :ref="'r'+scope.$index+'factory'"
+                      @keyup.native="handleKeyDown($event, scope)" size="mini" placeholder="请输入厂商"
                       :disabled="addForm.monthOrWeek==='2'"/>
           </template>
         </el-table-column>
@@ -224,6 +228,8 @@
           <template slot-scope="scope">
             <el-select
               v-model="scope.row.unit"
+              :ref="'r'+scope.$index+'unit'"
+              @keyup.native="handleKeyDown($event, scope,'select')"
               filterable
               allow-create
               default-first-option
@@ -244,7 +250,8 @@
             <span style="color: red">*</span><span>价格</span>
           </template>
           <template slot-scope="scope">
-            <el-input v-model="scope.row.price" size="mini" placeholder="请输入单价" :disabled="addForm.monthOrWeek==='2'"
+            <el-input v-model="scope.row.price" :ref="'r'+scope.$index+'price'"
+                      @keyup.native="handleKeyDown($event, scope)" size="mini" placeholder="请输入单价" :disabled="addForm.monthOrWeek==='2'"
                       style="width: 100%"/>
           </template>
         </el-table-column>
@@ -253,7 +260,8 @@
             <span style="color: red">*</span><span>领取量</span>
           </template>
           <template slot-scope="scope">
-            <el-input-number v-model="scope.row.num" size="mini" controls-position="right" :min="0"
+            <el-input-number v-model="scope.row.num" :ref="'r'+scope.$index+'num'"
+                             @keyup.native="handleKeyDown($event, scope)" size="mini" controls-position="right" :min="0"
                              placeholder="请输入领取量" style="width: 100%"/>
           </template>
         </el-table-column>
@@ -262,7 +270,8 @@
             <span style="color: red">*</span><span>物料类型</span>
           </template>
           <template slot-scope="scope">
-            <el-select v-model="scope.row.materialType" size="mini" :disabled="addForm.monthOrWeek==='2'"
+            <el-select v-model="scope.row.materialType" :ref="'r'+scope.$index+'materialType'"
+                       @keyup.native="handleKeyDown($event, scope,'select')" size="mini" :disabled="addForm.monthOrWeek==='2'"
                        style="width: 100%">
               <el-option label="生产" value="1"></el-option>
               <el-option label="非生产" value="2"></el-option>
@@ -271,16 +280,18 @@
         </el-table-column>
         <el-table-column label="用于项目" prop="projectId" width="120px">
           <template slot-scope="scope">
-            <el-select v-model="scope.row.projectId" size="mini" :disabled="addForm.monthOrWeek==='2'"
+            <el-select v-model="scope.row.projectId" :ref="'r'+scope.$index+'projectId'"
+                       @keyup.native="handleKeyDown($event, scope,'select')" size="mini" :disabled="addForm.monthOrWeek==='2'"
                        style="width: 100%">
               <el-option v-for="(item,index) in projectList" :label="item.projectName" :key="index"
                          :value="item.id"></el-option>
             </el-select>
           </template>
         </el-table-column>
-        <el-table-column label="备注">
+        <el-table-column label="备注" prop="remark">
           <template slot-scope="scope">
-            <el-input v-model="scope.row.remark" size="mini" type="textarea" autosize/>
+            <el-input v-model="scope.row.remark" :ref="'r'+scope.$index+'remark'"
+                      @keyup.native="handleKeyDown($event, scope)" size="mini" type="textarea" autosize/>
           </template>
         </el-table-column>
         <el-table-column width="50">
@@ -396,9 +407,11 @@ import {
 import {listProject} from "@/api/task/project";
 import DateUtil from "@/utils/date"
 import {mapGetters} from "vuex";
+import directionKey from "@/views/mixins/directionKey";
 
 export default {
   name: "Receive",
+  mixins: [directionKey],
   computed: {
     ...mapGetters([
       'userId'
@@ -478,7 +491,9 @@ export default {
           {required: true, message: "月/周数据不能为空", trigger: "change"}
         ]
       },
-      unitOptions: ['个', '张', '卷', '支']
+      unitOptions: ['个', '张', '卷', '支'],
+      labelArr: ['materialName', 'specification', 'articleNo', 'factory', 'unit', 'price', 'num', 'materialType', 'projectId', 'remark']
+
     };
   },
   created() {

+ 59 - 0
src/views/mixins/directionKey.js

@@ -0,0 +1,59 @@
+export default {
+  data() {
+    return {}
+  },
+  methods: {
+    handleKeyDown(event, scope, type) {
+      // ↑
+      if (event.keyCode === 38) {
+        if (type === 'select') {
+          return;
+        }
+        if (scope.$index > 0) {
+          this.changeFocus(scope.$index - 1, scope.column.property);
+        }
+      }
+      // ↓
+      if (event.keyCode === 40) {
+        if (type === 'select') {
+          return;
+        }
+        if (scope.$index < this.addList.length) {
+          this.changeFocus(scope.$index + 1, scope.column.property);
+        }
+      }
+      // ->
+      if (event.keyCode === 39) {
+        if (type === 'select') {
+          let refName = 'r' + scope.$index + scope.column.property
+          this.$refs[refName].blur();
+        }
+        let y = this.labelArr.indexOf(scope.column.property)
+
+        if (y > -1) {
+          this.changeFocus(scope.$index, this.labelArr[y + 1]);
+        }
+      }
+      // <-
+      if (event.keyCode === 37) {
+        if (type === 'select') {
+          let refName = 'r' + scope.$index + scope.column.property
+          this.$refs[refName].blur();
+        }
+        let y = this.labelArr.indexOf(scope.column.property)
+        if (y < this.labelArr.length) {
+          this.changeFocus(scope.$index, this.labelArr[y - 1]);
+        }
+      }
+    },
+
+    changeFocus(row, columnProperty) {
+      let refName = 'r' + row + columnProperty
+      this.$nextTick(() => {
+        let ref = this.$refs[refName];
+        if (ref) ref.focus();
+      });
+    },
+
+  }
+}