Bläddra i källkod

feat(运输管理): 添加任务验收功能及状态更新

liujt 2 månader sedan
förälder
incheckning
152fd5e528

+ 26 - 6
lib/vue-form-making/src/components/Upload/file.vue

@@ -6,9 +6,10 @@
          v-show="(!isQiniu || (isQiniu && token))"
          v-if="!printRead"
     >
-      <el-button v-if="ui == 'element'" type="primary" :disabled="disabled || fileList.length == limit"
+      <!-- <el-button v-if="ui == 'element'" type="primary" :disabled="disabled || fileList.length == limit"
                  @click="handleAdd">{{ $t('fm.actions.upload') }}
-      </el-button>
+      </el-button> -->
+      <fileMain v-if="ui == 'element'" :type="disabled || fileList.length == limit ? 'view' : 'add'" v-model="fileList" @updateVal="getFiles"></fileMain>
       <a-button :size="size" v-if="ui == 'antd'" icon="upload" :disabled="disabled || fileList.length == limit"
                 @click="handleAdd">{{ $t('fm.actions.upload') }}
       </a-button>
@@ -22,7 +23,7 @@
       {{ tip }}
     </div>
 
-    <ul class="upload-list">
+    <ul class="upload-list" v-if="ui == 'antd'">
       <li class="list_item"
           :class="{uploading: item.status=='uploading', 'is-success': item.status=='success', 'is-disabled': disabled}"
           v-for="(item) in fileList" :key="item.key"
@@ -57,12 +58,14 @@ import {executeExpression} from '../../util/expression'
 
 import {getFile, removeFile} from "/src/api/system/file";
 import {getToken} from "../../util/token";
+import fileMain from '@/components/addDoc/index.vue';
 
 require('viewerjs/dist/viewer.css')
 
 export default {
   components: {
-    Draggable
+    Draggable,
+    fileMain
   },
   props: {
     value: {
@@ -145,7 +148,14 @@ export default {
   },
   data() {
     return {
-      fileList: this.value.map(item => {
+      // orderFiles: [],
+      // fileList: this.value.map(item => {
+      //   return {
+      //     ...item,
+      //     key: item.key ? item.key : (new Date().getTime()) + '_' + Math.ceil(Math.random() * 99999),
+      //   }
+      // }),
+      fileList: this.ui == 'element' ? this.value : this.value.map(item => {
         return {
           ...item,
           key: item.key ? item.key : (new Date().getTime()) + '_' + Math.ceil(Math.random() * 99999),
@@ -167,6 +177,10 @@ export default {
     }
   },
   methods: {
+    getFiles(files) {
+      this.fileList = files
+      this.$emit('input', this.fileList)
+    },
     handleChange() {
       console.log(this.$refs.uploadInput.files)
       const files = this.$refs.uploadInput.files
@@ -417,7 +431,13 @@ export default {
   },
   watch: {
     value(val) {
-      this.fileList = this.value.map(item => {
+      // this.fileList = this.value.map(item => {
+      //   return {
+      //     ...item,
+      //     key: item.key ? item.key : (new Date().getTime()) + '_' + Math.ceil(Math.random() * 99999),
+      //   }
+      // })
+      this.fileList = this.ui == 'element' ? this.value : this.value.map(item => {
         return {
           ...item,
           key: item.key ? item.key : (new Date().getTime()) + '_' + Math.ceil(Math.random() * 99999),

+ 3 - 2
src/BIZComponents/inventoryTable.vue

@@ -683,6 +683,7 @@
         >
           <el-input
             v-model="scope.row[countObj.countKey]"
+            style="width: calc(100% - 36px)"
             placeholder="请输入"
             type="number"
             :min="0"
@@ -691,7 +692,7 @@
             <template slot="append">
               <el-select
                 v-model="scope.row[countObj.unitIdKey]"
-                style="width: 80px"
+                style="width: 100px"
                 v-if="!!scope.row.productId && scope.row.productId != 0"
                 @change="handleCountChange(scope.row, scope.$index)"
               >
@@ -706,7 +707,7 @@
                 v-else
                 v-model="scope.row.measuringUnit"
                 placeholder="单位"
-                style="width: 80px; padding: 0"
+                style="width: 100px; padding: 0"
               ></el-input>
             </template>
           </el-input>

+ 8 - 0
src/api/transportManager/shipManage/taskWork.js

@@ -41,4 +41,12 @@ export async function logisticlistcostGetByIdAPI(id) {
   return Promise.reject(new Error(res.data.message));
 }
 
+// 更新状态
+export async function logistictraklistnoteUpdateStatusAPI(id, data) {
+  const res = await request.patch(`/eom/logistictraklistnote/v1/statusChange/${id}`, data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
 

+ 3 - 2
src/views/saleManage/saleOrder/components/addDialogNew.vue

@@ -1534,6 +1534,7 @@
               this.$refs.inventoryTable.putTableValue(data);
             this.$refs.typeListRef &&
               this.$refs.typeListRef.putTableValue(data.typedetailList);
+            this.$refs.paymentCollectionPlanRef && this.$refs.paymentCollectionPlanRef.putTableValue(data);
 
             this.getLinkInfo(data.partaId);
             this.$store.commit('order/setContractId', data.partaId);
@@ -1936,8 +1937,8 @@
             typedetailList: this.$refs?.typeListRef?.getTableValue() || [],
             saleTypeName: this.getDictValue('销售类型', this.form.saleType),
             receiptPaymentList: this.$refs?.paymentCollectionPlanRef?.getTableValue() || [],
-            endSettlementDate: this.form.settlementDate.length ?this.form.settlementDate[1] : '',
-            startSettlementDate: this.form.settlementDate.length ? this.form.settlementDate[0] : ''
+            endSettlementDate: this.form.settlementDate?.length ?this.form.settlementDate[1] : '',
+            startSettlementDate: this.form.settlementDate?.length ? this.form.settlementDate[0] : ''
             // progress: this.form.needProduce == 0 ? 700 : 0
           });
 

+ 40 - 5
src/views/transportManager/shipManage/taskWorkManage/components/feeInfoDialog.vue

@@ -12,7 +12,7 @@
     :before-close="cancel"
   >
     <el-form
-      v-if="dialogType === 'view'"
+      v-if="dialogType === 'view' || dialogType === 'accept'"
       ref="form"
       :rules="rules"
       :model="form"
@@ -425,8 +425,21 @@
         </template>
       </ele-pro-table>
     </el-form>
+    <div v-if="dialogType == 'accept' || form.status == 4">
+      <el-form :model="acceptForm" :rules="rules" ref="acceptForm">
+        <el-form-item label="验收说明" prop="checkRemark">
+          <el-input :disabled="form.status == 4" type="textarea" v-model="acceptForm.checkRemark" placeholder="请输入验收说明"></el-input>
+        </el-form-item>
+      </el-form>
+    </div>
     <div slot="footer">
-      <el-button type="primary" @click="handleSave" v-if="dialogType !== 'view'"
+      <el-button type="primary" @click="handleAccept(4)" v-if="dialogType == 'accept'"
+        >验收</el-button
+      >
+      <el-button type="danger" @click="handleAccept(1)" v-if="dialogType == 'accept'"
+        >驳回</el-button
+      >
+      <el-button type="primary" @click="handleSave" v-if="dialogType !== 'view' && dialogType !== 'accept'"
         >保存</el-button
       >
       <el-button @click="cancel">返回</el-button>
@@ -438,7 +451,8 @@
 <script>
 import {
   logisticlistcostGetByIdAPI,
-  logistictraklistnoteUpdateAPI
+  logistictraklistnoteUpdateAPI,
+  logistictraklistnoteUpdateStatusAPI
 } from '@/api/transportManager/shipManage/taskWork';
 import { deepClone } from '@/utils';
 import { mapGetters } from 'vuex';
@@ -487,9 +501,12 @@ export default {
         endPlace: '',
         realStartTime: '',
         realEndTime: '',
-        remark: ''
+        remark: '',
       },
       dialogType: '',
+      acceptForm: {
+        checkRemark: ''
+      },
       rules: {
         startMileage: {
           required: true,
@@ -521,6 +538,9 @@ export default {
   },
   computed: {
     ...mapGetters(['getDictValue']),
+    userInfo() {
+      return this.$store.getters.user.info;
+    },
     columns() {
       let list = [
         {
@@ -642,6 +662,7 @@ export default {
         startMileageImagesFileIds: this.formatImageIds(response.startMileageImagesFileIds),
         endMileageImagesFileIds: this.formatImageIds(response.endMileageImagesFileIds)
       };
+      this.acceptForm.checkRemark = response.checkRemark || '';
 
       // 处理开始里程图片(使用路径生成URL,同步ID)
       this.startMileageImgs = this.form.startMileageImagesPaths
@@ -775,6 +796,7 @@ export default {
         data.startMileageImagesFileIds = this.form.startMileageImagesFileIds;
         data.endMileageImagesFileIds = this.form.endMileageImagesFileIds;
 
+
         try {
           await logistictraklistnoteUpdateAPI(data);
           this.$message.success('操作成功');
@@ -784,7 +806,20 @@ export default {
           this.$message.error('保存失败:' + (error.message || '未知错误'));
         }
       });
-    }
+    },
+    async handleAccept(status) {
+      try {
+        await logistictraklistnoteUpdateStatusAPI(this.currentRow.id, {
+          status: status,
+          checkRemark: this.acceptForm.checkRemark
+        });
+        this.$message.success('操作成功');
+        this.$emit('reload');
+        this.cancel();
+      } catch (error) {
+        this.$message.error('操作失败:' + (error.message || '未知错误'));
+      }
+    } 
   }
 };
 </script>

+ 17 - 2
src/views/transportManager/shipManage/taskWorkManage/page.vue

@@ -55,6 +55,15 @@
         >
           报工
         </el-link>
+        <el-link
+          type="primary"
+          :underline="false"
+          icon="el-icon-edit"
+          v-if="[2].includes(row.status) && row.responsiblePersonId == userInfo.userId"
+          @click="handleFee(row, 'accept')"
+        >
+          验收
+        </el-link>
       </template>
       <template v-slot:planName="{ row }">
         <el-link
@@ -67,7 +76,7 @@
       </template>
       <template v-slot:code="{ row }">
         <el-link
-          :disabled="![2].includes(row.status)"
+          :disabled="![2,3,4].includes(row.status)"
           type="primary"
           :underline="false"
           @click="handleFee(row, 'view')"
@@ -136,7 +145,9 @@
         statusList: [
           { value: 0, label: '待接收' },
           { value: 1, label: '执行中' },
-          { value: 2, label: '已完成' }
+          { value: 2, label: '待验收' },
+          // { value: 3, label: '待验收' },
+          { value: 4, label: '已验收' }
         ],
         delVisible: false,
         // 加载状态
@@ -296,6 +307,10 @@
             fixed: 'right'
           }
         ];
+      },
+      userInfo() {
+        console.log('userInfo', this.$store.getters.user.info);
+        return this.$store.getters.user.info;
       }
     },
     created() {},

+ 3 - 1
src/views/transportManager/shipManage/taskWorkManage/pageSearchTable.vue

@@ -32,7 +32,9 @@ export default {
           planList: [
           { value: 0, label: '待接收' },
           { value: 1, label: '执行中' },
-          { value: 2, label: '已完成' }
+          { value: 2, label: '待验收' },
+          // { value: 3, label: '待验收' },
+          { value: 4, label: '已验收' }
           ]
         },
         {