Browse Source

Merge remote-tracking branch 'origin/master'

Lambert 2 weeks ago
parent
commit
dd54dd607a

+ 4 - 1
src/components/FlowTable.vue

@@ -57,7 +57,10 @@
   }
   // 详情工作流列表
   const getFlowInstance = async () => {
-    const [err, res]: ToResponse = await to(flowApi.getFlowInstance({ id: props.id, businessCode: props.businessCode, defCode: props.defCode }))
+    const [err, res]: ToResponse = await to(flowApi.getFlowInstance({ 
+      id: props.id, 
+      businessCode: props.businessCode, 
+      defCode: props.defCode }))
     if (err) return
     const arr = res?.data?.nodes || []
     apprList.value = arr

+ 155 - 51
src/view/animal/applicationRemoval/components/addEdit.vue

@@ -53,59 +53,77 @@
               :rules="rules.isReturn"
             />
 
-            <template v-if="state.dialog.type === 'detail'">
+            <template v-if="state.dialog.type === 'detail' && turnBackInfoList.length">
               <h4 class="mb20 mt20">转回信息</h4>
-              <van-cell-group>
-                <van-field
-                  label="门禁卡是否归还"
-                  :model-value="accessCardReturnText"
-                  readonly
-                />
-                <van-field
-                  label="转回日期"
-                  :model-value="returnDateText"
-                  readonly
-                />
-                <van-field
-                  label="转回数量(雄性+雌性)"
-                  :model-value="returnAnimalNumberText"
-                  readonly
-                />
-                <van-field
-                  v-model="state.form.returnTransport"
-                  label="转回运输方式"
-                  readonly
-                />
-                <van-field
-                  v-model="state.form.notReturnReason"
-                  label="未返回动物情况说明"
-                  readonly
-                />
-              </van-cell-group>
-
+              <div class="simple-table">
+                <div class="simple-table__header">
+                  <div class="simple-table__cell" align="center">日期</div>
+                  <div class="simple-table__cell" align="center">转回数量</div>
+                  <div class="simple-table__cell" align="center">运输方式</div>
+                  <div class="simple-table__cell" align="center">门禁卡是否归还</div>
+                  <div class="simple-table__cell" align="center">审批记录</div>
+                </div>
+                <div
+                  v-for="(item, index) in turnBackInfoList"
+                  :key="index"
+                  class="simple-table__row"
+                >
+                  <div class="simple-table__cell" align="center">
+                    {{ formatYmd(item.createdTime) || '-' }}
+                  </div>
+                  <div class="simple-table__cell" align="center">
+                  {{ (item.returnMaleNumber || 0) + (item.returnFemaleNumber || 0) }}
+                  (雄:{{ item.returnMaleNumber || 0 }},雌:{{ item.returnFemaleNumber || 0 }})
+                  </div>
+                  <div class="simple-table__cell" align="center">
+                    {{ item.returnTransport || '-' }}
+                  </div>
+                  <div class="simple-table__cell" align="center">
+                    {{ item.accessCardReturn === 1 ? '是' : item.accessCardReturn === 0 ? '否' : '-' }}
+                  </div>
+                  <div class="simple-table__cell" align="center">
+                    <van-button
+                      v-if="item.approvalId || item.businessCode"
+                      size="small"
+                      type="primary"
+                      @click="onViewRebackApproval(item)"
+                    >
+                      详情
+                    </van-button>
+                    <span v-else>-</span>
+                  </div>
+                </div>
+              </div>
+            </template>
+            <template v-if="state.dialog.type === 'detail' && dieInfoList.length">
               <h4 class="mb20 mt20">淘汰上报信息</h4>
-              <van-cell-group>
-                <van-field
-                  label="淘汰日期"
-                  :model-value="dieTimeText"
-                  readonly
-                />
-                <van-field
-                  v-model="state.form.dieReason"
-                  label="淘汰原因"
-                  readonly
-                />
-                <van-field
-                  label="淘汰数量(雄性+雌性)"
-                  :model-value="dieAnimalNumberText"
-                  readonly
-                />
-                <van-field
-                  v-model="state.form.location"
-                  label="动物尸体存放位置"
-                  readonly
-                />
-              </van-cell-group>
+              <div class="simple-table">
+                <div class="simple-table__header-taotai">
+                  <div class="simple-table__cell" align="center">淘汰日期</div>
+                  <div class="simple-table__cell" align="center">淘汰数量</div>
+                  <div class="simple-table__cell" align="center">淘汰原因</div>
+                  <div class="simple-table__cell" align="center">尸体存放位置</div>
+                </div>
+                <div
+                  v-for="(item, index) in dieInfoList"
+                  :key="index"
+                  class="simple-table__row-taotai"
+                >
+                  <div class="simple-table__cell" align="center">
+                    {{ formatYmd(item.dieTime) || '-' }}
+                  </div>
+                  <div class="simple-table__cell" align="center">
+                    {{ (item.returnMaleNumber || 0) + (item.returnFemaleNumber || 0) }}
+                  (雄:{{ item.returnMaleNumber || 0 }},雌:{{ item.returnFemaleNumber || 0 }})
+                  </div>
+                  <div class="simple-table__cell" align="center">
+                    {{ item.dieReason || '-' }}
+                  </div>
+                  <div class="simple-table__cell" align="center">
+                    {{ item.location || '-' }}
+                  </div>
+                </div>
+              </div>
             </template>
             <div class="mt30 mb30 checkbox-wrapper">
               <van-checkbox v-model="safePromiseStatus" :disabled="isReadOnly">
@@ -162,6 +180,21 @@
                   @confirm="onReturnOptionConfirm" @cancel="showReturnPicker = false" />
     </van-popup>
 
+    <!-- 转回审批流程弹窗 -->
+    <van-popup v-model:show="showRebackApproval" position="bottom" :style="{ height: '80vh' }" round>
+      <div class="notice-content">
+        <h4 class="notice-title">转回审批流程</h4>
+        <div class="text">
+          <FlowTable
+            v-if="currentRebackApprovalId || currentRebackBusinessCode"
+            :id="currentRebackApprovalId || 0"
+            :businessCode="currentRebackBusinessCode"
+            defCode="plat_animal_takeway_reback"
+          />
+        </div>
+      </div>
+    </van-popup>
+
     <!-- 须知弹窗 -->
     <van-popup v-model:show="isShowNotice" position="bottom" round :closeable="true" :style="{ height: '70vh' }">
       <div class="notice-content">
@@ -217,6 +250,11 @@ const showCategoryPicker = ref<boolean>(false)
 const showDatePicker = ref<boolean>(false)
 const selectedDate = ref<Date | null>(null)
 const showReturnPicker = ref<boolean>(false)
+const turnBackInfoList = ref<any[]>([])
+const dieInfoList = ref<any[]>([])
+const showRebackApproval = ref<boolean>(false)
+const currentRebackApprovalId = ref<number | null>(null)
+const currentRebackBusinessCode = ref<string>('')
 
 const isReadOnly = computed(() => state.dialog.type === 'detail')
 
@@ -385,6 +423,9 @@ const loadRebackInfo = async (takeawayId?: number) => {
   const turnBackList = list.filter((item: any) => String(item.takeawayType) === '10')
   const dieList = list.filter((item: any) => String(item.takeawayType) === '20')
 
+  turnBackInfoList.value = turnBackList
+  dieInfoList.value = dieList
+
   const turnBack = turnBackList[turnBackList.length - 1]
   const die = dieList[dieList.length - 1]
 
@@ -416,6 +457,20 @@ const loadRebackInfo = async (takeawayId?: number) => {
   }
 }
 
+const onViewRebackApproval = (item: any) => {
+  const id = Number(item.approvalId || 0)
+  let businessCode = ''
+  if (item.businessCode) {
+    businessCode = String(item.businessCode)
+  } else if (item.id) {
+    businessCode = String(item.id)
+  }
+  if (!id && !businessCode) return
+  currentRebackApprovalId.value = id || null
+  currentRebackBusinessCode.value = businessCode
+  showRebackApproval.value = true
+}
+
 const openDialog = async (type: ActionType, sourceData?: TakeawayList) => {
   await getDicts()
   state.dialog.type = type
@@ -508,6 +563,8 @@ const closeDialog = () => {
   selectedDate.value = null
   state.loading = false
   state.dialog.isShowDialog = false
+  turnBackInfoList.value = []
+  dieInfoList.value = []
 }
 
 const onCancel = () => {
@@ -749,6 +806,53 @@ defineExpose({
       margin-top: 16px;
     }
   }
+
+  .simple-table {
+    width: 100%;
+    border: 1px solid #ebedf0;
+    border-radius: 8px;
+    overflow-x: auto;
+    overflow-y: hidden;
+    font-size: 12px;
+    background-color: #fff;
+    margin-top: 8px;
+  }
+
+  .simple-table__header,
+  .simple-table__row {
+    display: flex;
+    min-width: 660px;
+  }
+  .simple-table__header-taotai,
+  .simple-table__row-taotai {
+    display: flex;
+    min-width: 500px;
+  }
+
+  .simple-table__header {
+    background-color: #f7f8fa;
+    font-weight: 600;
+  }
+
+  .simple-table__cell {
+    flex: 1;
+    padding: 8px;
+    border-bottom: 1px solid #ebedf0;
+    word-break: break-all;
+  }
+
+  .simple-table__header .simple-table__cell + .simple-table__cell,
+  .simple-table__row .simple-table__cell + .simple-table__cell {
+    border-left: 1px solid #ebedf0;
+  }
+
+  .simple-table__row:last-child .simple-table__cell {
+    border-bottom: none;
+  }
+
+  .simple-table__approval {
+    padding: 8px 0 16px;
+  }
 }
 
 :deep(.van-checkbox) {

+ 6 - 1
src/view/animal/applicationRemoval/components/dieModal.vue

@@ -14,7 +14,7 @@
                 @click="showDieDatePicker = true" />
 
               <van-field v-model="state.form.dieReason" label="淘汰原因" placeholder="请输入" type="textarea" rows="2" />
-              <van-field v-model="state.form.location" label="动物尸体存放位置" placeholder="请输入" type="textarea" rows="2" />
+              <van-field v-model="state.form.location" label="动物尸体存放位置" placeholder="请输入" type="textarea" rows="2"  />
 
               <van-field label="雄性">
                 <template #input>
@@ -94,6 +94,11 @@ const validateForm = () => {
     return false
   }
 
+  if (!state.form.location) {
+    showNotify({ type: 'warning', message: '请输入动物尸体存放位置' })
+    return false
+  }
+
   if (!state.form.returnMaleNumber && !state.form.returnFemaleNumber) {
     showNotify({ type: 'warning', message: '请至少填写一项淘汰数量' })
     return false

+ 6 - 10
src/view/animal/applicationRemoval/components/turnBack.vue

@@ -25,9 +25,9 @@
                   <van-stepper v-model="state.form.returnFemaleNumber" integer :min="0" />
                 </template>
               </van-field>
-
+<!-- 
               <van-field v-model="state.form.notReturnReason" label="未返回动物情况说明"
-                placeholder="请输入" type="textarea" rows="3" />
+                placeholder="请输入" type="textarea" rows="3" /> -->
 
               <van-field label="门禁卡是否归还">
                 <template #input>
@@ -112,14 +112,10 @@ const validateForm = () => {
       return false
     }
 
-    if (!state.form.notReturnReason) {
-      showNotify({ type: 'warning', message: '请输入未返回动物情况说明' })
-      return false
-    }
-    state.form.returnDate = ''
-    state.form.returnTransport = ''
-    state.form.returnMaleNumber = 0
-    state.form.returnFemaleNumber = 0
+    // if (!state.form.notReturnReason) {
+    //   showNotify({ type: 'warning', message: '请输入未返回动物情况说明' })
+    //   return false
+    // }
 
   return true
 }

+ 20 - 4
src/view/animal/applicationRemoval/index.vue

@@ -226,20 +226,36 @@
                     重新提交
                   </el-button>
                 </el-col>
-                <el-col :span="12">
+                <el-col
+                  v-if="item.approveStatus === ApplyLeaveApproveStatus.PASS && item.isReturn === 10"
+                  :span="12"
+                >
                   <el-button
                     style="width: 100%"
-                    v-if="item.approveStatus === ApplyLeaveApproveStatus.PASS"
                     type="primary"
                     @click.stop="handleReturn(item)"
                   >
                     转回
                   </el-button>
                 </el-col>
-                <el-col :span="12">
+                <el-col
+                  v-if="item.approveStatus === ApplyLeaveApproveStatus.PASS && item.isReturn === 10"
+                  :span="12"
+                >
+                  <el-button
+                    style="width: 100%"
+                    type="primary"
+                    @click.stop="handleDie(item)"
+                  >
+                    淘汰动物上报
+                  </el-button>
+                </el-col>
+                <el-col
+                  v-if="item.approveStatus === ApplyLeaveApproveStatus.PASS && item.isReturn !== 10"
+                  :span="24"
+                >
                   <el-button
                     style="width: 100%"
-                    v-if="item.approveStatus === ApplyLeaveApproveStatus.PASS"
                     type="primary"
                     @click.stop="handleDie(item)"
                   >

+ 2 - 2
src/view/todo/component/plat_animal_takeway_reback.vue

@@ -20,8 +20,8 @@
           </template>
         </van-cell>
       </template>
-
-      <van-cell v-else title="未返回动物情况说明" :value="state.form.notReturnReason || '-'" />
+<!-- 
+      <van-cell v-else title="未返回动物情况说明" :value="state.form.notReturnReason || '-'" /> -->
     </van-cell-group>
   </div>
 </template>