浏览代码

Merge branch 'master' of http://47.100.37.243:10191/wutt/manHourHousekeeper

zhouyy 4 月之前
父节点
当前提交
6407187151
共有 17 个文件被更改,包括 512 次插入97 次删除
  1. 8 2
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/hooks/useApi.js
  2. 27 5
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/moduleList/moduleList.vue
  3. 10 4
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/business/addEditor.vue
  4. 2 2
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/contract/addEditor.vue
  5. 6 2
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/contract/detail.vue
  6. 4 0
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/order/addEditor.vue
  7. 4 0
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/order/detail.vue
  8. 3 3
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/order/orderInfo.vue
  9. 156 0
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/order/paymentCollection.vue
  10. 1 0
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/product/newAndModifiedRelatedProducts.vue
  11. 3 3
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/product/productInfo.vue
  12. 1 1
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/tasks/addEditor.vue
  13. 18 0
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/thread/threadInfo.vue
  14. 15 2
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/utility/customInstructions.js
  15. 5 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/AlertTimeController.java
  16. 248 72
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/task/TimingTask.java
  17. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

+ 8 - 2
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/hooks/useApi.js

@@ -47,7 +47,8 @@ export const TASK_ADD_EDIT = `/tasks/addTask` // 任务新增
 export const MODIFY_TASK = `/tasks/updateTask` // 任务编辑
 export const MODIFY_TASK = `/tasks/updateTask` // 任务编辑
 export const TASK_OPERATION = `/tasks/updateTaskStatus` // 任务操作
 export const TASK_OPERATION = `/tasks/updateTaskStatus` // 任务操作
 export const PRODUCT_ADD_EDITOR = `/product/addOrUpdate` // 产品新增编辑
 export const PRODUCT_ADD_EDITOR = `/product/addOrUpdate` // 产品新增编辑
-export const CONTRACT_ADDITION_EDITING = `/contract/addContract` // 合同新增编辑
+export const CONTRACT_ADDITION_EDITING = `/contract/addContract` // 合同新增
+export const CONTRACT_EDITING = `/contract/editContract` // 合同编辑
 export const ORDER_ADDITION_EDITING = `/order/addOrUpdate` // 订单新增编辑
 export const ORDER_ADDITION_EDITING = `/order/addOrUpdate` // 订单新增编辑
 export const PLAN_TO_ADD_EDITORS = `/visitPlan/addOrUpdateVisitPlan` // 计划新增编辑
 export const PLAN_TO_ADD_EDITORS = `/visitPlan/addOrUpdateVisitPlan` // 计划新增编辑
 
 
@@ -64,6 +65,7 @@ export const OBTAIN_DETAILS_OF_THE_VISIT_PLAN = `/visitPlan/getVisitPlanDetail`
 export const GET_PRODUCT_DETAILS = `/product/detail` // 获取产品详情
 export const GET_PRODUCT_DETAILS = `/product/detail` // 获取产品详情
 export const GET_TASK_DETAILS = `/tasks/getTaskDetail` // 获取任务详情
 export const GET_TASK_DETAILS = `/tasks/getTaskDetail` // 获取任务详情
 export const SELL_AND_OBTAIN_RELATED_PRODUCTS = `/product/orderWithProduct` // 销售订单关联产品
 export const SELL_AND_OBTAIN_RELATED_PRODUCTS = `/product/orderWithProduct` // 销售订单关联产品
+export const OBTAIN_CONTRACT_DETAILS = `/contract/getContractDetail` // 获取合同详情
 
 
 export const GET_CONTACTS_WITH_MORE_I_DS = `/contacts/getAllContacts` // 更具Id获取联系人
 export const GET_CONTACTS_WITH_MORE_I_DS = `/contacts/getAllContacts` // 更具Id获取联系人
 export const CONTACT_PERSON_ASSOCIATED_WITH_BUSINESS_OPPORTUNITY = `/business-opportunity/saveContactsId` // 联系人关联商机
 export const CONTACT_PERSON_ASSOCIATED_WITH_BUSINESS_OPPORTUNITY = `/business-opportunity/saveContactsId` // 联系人关联商机
@@ -112,4 +114,8 @@ export const OBTAIN_DATA_SUMMARY = `/order/dataSummary` // 获取数据汇总
 export const STAGE_OF_OBTAINING_BUSINESS_OPPORTUNITIES = `/order/businessOpportunityStage` // 获取商机阶段
 export const STAGE_OF_OBTAINING_BUSINESS_OPPORTUNITIES = `/order/businessOpportunityStage` // 获取商机阶段
 export const ACQUISITION_STAGE = `/business-opportunity/getStage` // 获取阶段
 export const ACQUISITION_STAGE = `/business-opportunity/getStage` // 获取阶段
 export const PROMOTION_STAGE = `/business-opportunity/saveStageId` // 推进阶段
 export const PROMOTION_STAGE = `/business-opportunity/saveStageId` // 推进阶段
-export const STAGE_NOTES = `/business-opportunity/saveReason` // 阶段备注
+export const STAGE_NOTES = `/business-opportunity/saveReason` // 阶段备注
+export const OBTAIN_SALES_ORDER_RECEIPTS = `/order/paymentCollectionList` // 获取销售订单收款列表
+export const NEW_SALES_ORDER_PAYMENT_COLLECTION = `/order/paymentCollection` // 新建销售订单收款
+export const SALES_ORDER_COLLECTION_EDITING = `/order/editPayment` // 编辑销售订单收款
+export const DELETE_SALES_ORDER_PAYMENT_RECORDS = `/order/deletePayment` // 删除销售订单收款记录

+ 27 - 5
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/moduleList/moduleList.vue

@@ -273,6 +273,8 @@ const listData = ref({
 });
 });
 const excessiveData = ref({});
 const excessiveData = ref({});
 const dialogSelection = ref({});
 const dialogSelection = ref({});
+const timeout = ref(null)
+
 
 
 // 按钮触发的事件: row 为当前点击的行数据, item 为当前点击的按钮
 // 按钮触发的事件: row 为当前点击的行数据, item 为当前点击的按钮
 function longPress(row, item) {
 function longPress(row, item) {
@@ -457,12 +459,17 @@ async function getListData(flag = false) {
   if (flag) {
   if (flag) {
     loadingList.value = true
     loadingList.value = true
   }
   }
-  const res = await requests.post(url, {
+  let formVal = {
     pageIndex: listData.value.pageIndex,
     pageIndex: listData.value.pageIndex,
     pageSize: listData.value.pageSize,
     pageSize: listData.value.pageSize,
     pageFrom: listData.value.pageSize,
     pageFrom: listData.value.pageSize,
-    [queryParameters.value?.searchFiled?.search]: searchVal.value
-  }).finally(() => {
+    [queryParameters.value?.searchFiled?.search]: searchVal.value,
+  }
+
+  if(queryParameters.value?.key == 'product') {
+    formVal.status = 1
+  }
+  const res = await requests.post(url, { ...formVal }).finally(() => {
     if (flag) {
     if (flag) {
       loadingList.value = false
       loadingList.value = false
     }
     }
@@ -511,14 +518,29 @@ function dialogCloseBefo(val) {
   return true
   return true
 }
 }
 
 
+function chuliReloadListData(data) {
+  clearTimeout(timeout.value);
+  timeout.value = setTimeout(() => {
+    reloadListData(data)
+  }, 100);
+}
+
+function chuliOnRefresh(data) {
+  clearTimeout(timeout.value);
+  timeout.value = setTimeout(() => {
+    onRefresh(true)
+  }, 100);
+}
+
 useLifecycle({
 useLifecycle({
   load: () => {
   load: () => {
+    chuliOnRefresh(true)
     router.on('moduleListDetailParameter', (data) => {
     router.on('moduleListDetailParameter', (data) => {
-      reloadListData(data)
+      chuliReloadListData(data)
     })
     })
 
 
     router.eventOn('moduleListRefreshData', (data) => {
     router.eventOn('moduleListRefreshData', (data) => {
-      onRefresh(true)
+      chuliOnRefresh(true)
     })
     })
   }
   }
 });
 });

+ 10 - 4
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/business/addEditor.vue

@@ -64,10 +64,16 @@ function onSubmit() {
     if(flagVal) {
     if(flagVal) {
       return
       return
     }
     }
-    newList.forEach((item) => {
-      item.typeName = item.productType
-      delete item.id
-    })
+
+    for(let i in newList) {
+      if(!newList[i].totalPrice || newList[i].totalPrice == '0') {
+        toastText(`相关产品【${newList[i].productName}】请填写完整`)
+        return
+      }
+      newList[i].typeName = newList[i].productType
+      delete newList[i].id
+    }
+
     const newForm = {
     const newForm = {
       ...props.formValue,
       ...props.formValue,
       ...res.data,
       ...res.data,

+ 2 - 2
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/contract/addEditor.vue

@@ -17,7 +17,7 @@ import { useLifecycle } from '@hooks/useCommon.js';
 import CustomerForm from '@components/common/formForm/formView.vue'
 import CustomerForm from '@components/common/formForm/formView.vue'
 import requests from "@common/requests";
 import requests from "@common/requests";
 import useToast from "@hooks/useToast"
 import useToast from "@hooks/useToast"
-import { CONTRACT_ADDITION_EDITING } from "@hooks/useApi"
+import { CONTRACT_ADDITION_EDITING, CONTRACT_EDITING } from "@hooks/useApi"
 import useRouterStore from "@store/useRouterStore.js";
 import useRouterStore from "@store/useRouterStore.js";
 
 
 const router = useRouterStore()
 const router = useRouterStore()
@@ -38,7 +38,7 @@ function onSubmit() {
       return
       return
     }
     }
     toastLoading('保存中', 0)
     toastLoading('保存中', 0)
-    requests.post(CONTRACT_ADDITION_EDITING, { ...props.formValue, ...res.data }).then(() => {
+    requests.post(props.formValue?.id ? CONTRACT_EDITING : CONTRACT_ADDITION_EDITING, { ...props.formValue, ...res.data }).then(() => {
       toastSuccess('保存成功')
       toastSuccess('保存成功')
       setTimeout(() => {
       setTimeout(() => {
         router.navigateBack({
         router.navigateBack({

+ 6 - 2
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/contract/detail.vue

@@ -18,6 +18,8 @@
           {{ infoData.payment ? (100 * infoData.payment / infoData.amounts).toFixed(1) + '%' : '0%' }}
           {{ infoData.payment ? (100 * infoData.payment / infoData.amounts).toFixed(1) + '%' : '0%' }}
         </template>
         </template>
       </van-cell>
       </van-cell>
+      <van-cell title="计划开始时间" :value="infoData.startDate" />
+      <van-cell title="计划结束时间" :value="infoData.endDate" />
       <van-cell title="下笔回款日期" :value="infoData.nextPaymentDate">
       <van-cell title="下笔回款日期" :value="infoData.nextPaymentDate">
         <template #default>
         <template #default>
           {{ infoData.nextPaymentDate ? infoData.nextPaymentDate : '-' }}
           {{ infoData.nextPaymentDate ? infoData.nextPaymentDate : '-' }}
@@ -64,7 +66,7 @@ import requests from "@common/requests";
 import { showConfirmDialog } from 'vant';
 import { showConfirmDialog } from 'vant';
 import { useLifecycle } from '@hooks/useCommon.js';
 import { useLifecycle } from '@hooks/useCommon.js';
 import { fixedFieldStatusArray } from '@/utility/defaultData.js';
 import { fixedFieldStatusArray } from '@/utility/defaultData.js';
-import { CONTRACT_APPROVED } from '@hooks/useApi'
+import { CONTRACT_APPROVED, OBTAIN_CONTRACT_DETAILS } from '@hooks/useApi'
 import useShowToast from '@hooks/useToast'
 import useShowToast from '@hooks/useToast'
 import useInfoStore from '@store/useInfoStore'
 import useInfoStore from '@store/useInfoStore'
 import useRouterStore from "@store/useRouterStore.js";
 import useRouterStore from "@store/useRouterStore.js";
@@ -183,7 +185,9 @@ function jumpEdit() {
 }
 }
 
 
 function getDetails(id) {
 function getDetails(id) {
-  // 获取合同详情
+  requests.post(OBTAIN_CONTRACT_DETAILS, { id }).then((res) => {
+    infoData.value = res.data || {}
+  })
 }
 }
 function processingData(id) {
 function processingData(id) {
   clearTimeout(timeout.value);
   clearTimeout(timeout.value);

+ 4 - 0
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/order/addEditor.vue

@@ -67,6 +67,10 @@ function onSubmit() {
     }
     }
     let newList = businessItemProductList.value.filter(item => item.productId)
     let newList = businessItemProductList.value.filter(item => item.productId)
     for (let i in newList) {
     for (let i in newList) {
+      if(!newList[i].totalPrice || newList[i].totalPrice == '0') {
+        toastText(`相关产品【${newList[i].productName}】请填写完整`)
+        return
+      }
       newList[i].sealPrice = newList[i].sellingPrice
       newList[i].sealPrice = newList[i].sellingPrice
       newList[i].discount = newList[i].discount
       newList[i].discount = newList[i].discount
       newList[i].num = newList[i].quantity
       newList[i].num = newList[i].quantity

+ 4 - 0
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/order/detail.vue

@@ -10,6 +10,9 @@
       <van-tab title="相关产品" name="相关产品">
       <van-tab title="相关产品" name="相关产品">
         <RelatedProducts :infoList="relatedProductsList" />
         <RelatedProducts :infoList="relatedProductsList" />
       </van-tab>
       </van-tab>
+      <van-tab title="回款" name="回款">
+        <PaymentCollection :info="infoData" />
+      </van-tab> 
     </van-tabs>
     </van-tabs>
   </div>
   </div>
 </template>
 </template>
@@ -22,6 +25,7 @@ import requests from "@common/requests";
 import OrderInfo from './orderInfo.vue';
 import OrderInfo from './orderInfo.vue';
 import RelatedTasks from '../tasks/relatedTasks.vue';
 import RelatedTasks from '../tasks/relatedTasks.vue';
 import RelatedProducts from '../product/relatedProducts.vue';
 import RelatedProducts from '../product/relatedProducts.vue';
+import PaymentCollection from './paymentCollection.vue';
 
 
 const props = defineProps({
 const props = defineProps({
   info: {
   info: {

+ 3 - 3
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/order/orderInfo.vue

@@ -25,7 +25,7 @@
           <span class="text-[#FF8B32]" v-if="info.unReceivedPayment">¥ {{ info.unReceivedPayment }}</span>
           <span class="text-[#FF8B32]" v-if="info.unReceivedPayment">¥ {{ info.unReceivedPayment }}</span>
         </template>
         </template>
       </van-cell>
       </van-cell>
-      <van-cell title="订单类型" :value="info.type" />
+      <van-cell title="订单类型" :value="info.typeName" />
       <van-cell title="下单时间" :value="info.placeTime" />
       <van-cell title="下单时间" :value="info.placeTime" />
       <van-cell title="订单开始时间" :value="info.orderStartDate" />
       <van-cell title="订单开始时间" :value="info.orderStartDate" />
       <van-cell title="订单结束时间" :value="info.orderEndDate" />
       <van-cell title="订单结束时间" :value="info.orderEndDate" />
@@ -75,7 +75,7 @@ import { ref } from 'vue';
 import { showConfirmDialog } from 'vant';
 import { showConfirmDialog } from 'vant';
 import { useLifecycle } from '@hooks/useCommon.js';
 import { useLifecycle } from '@hooks/useCommon.js';
 import { fixedFieldPaymentStatus } from "@utility/defaultData" 
 import { fixedFieldPaymentStatus } from "@utility/defaultData" 
-import { TRANSFER_CLUES } from '@hooks/useApi'
+import { TRANSFER_CLUES, TRANSFER_SALES_ORDERS } from '@hooks/useApi'
 import requests from "@common/requests";
 import requests from "@common/requests";
 import useShowToast from '@hooks/useToast'
 import useShowToast from '@hooks/useToast'
 import useInfoStore from '@store/useInfoStore'
 import useInfoStore from '@store/useInfoStore'
@@ -154,7 +154,7 @@ function confirmTransfer() {
     return toastText('请选择要转移的人员')
     return toastText('请选择要转移的人员')
   }
   }
 
 
-  requests.post(TRANSFER_CLUES, { ids: props.info.id, inchargerId: dialogSelection.value.value }).then((res) => {
+  requests.post(TRANSFER_SALES_ORDERS, { id: props.info.id, userId: dialogSelection.value.value }).then((res) => {
     toastSuccess('转移成功')
     toastSuccess('转移成功')
     showDialog.value = false
     showDialog.value = false
     setTimeout(() => {
     setTimeout(() => {

+ 156 - 0
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/order/paymentCollection.vue

@@ -0,0 +1,156 @@
+<template>
+  <div class="flex flex-col h-full paymentCollection">
+    <div class="info flex-1 overflow-y-auto cellnormall">
+      <template v-if="paymentPlanList.length">
+        <div class="bg-white py-2 mb-4" v-for="item in paymentPlanList" :key="item.id">
+          <van-cell-group inset>
+            <van-cell title="回款时间" :value="item.createTime" />
+            <van-cell title="操作人">
+              <template #default>
+                <TranslationComponent :openId="item.creatorName"></TranslationComponent>
+              </template>
+            </van-cell>
+            <van-cell title="回款金额" :value="item.money" />
+            <van-cell title="未回款金额" :value="item.unReceivedPayment" />
+            <van-cell title="操作">
+              <template #default>
+                <div class="flex justify-end">
+                  <div class="mr-3 themeTextColor" @click="editPaymentCollection(item)">编辑</div>
+                  <div class="text-[red]" @click="deletePaymentCollection(item)">删除</div>
+                </div>
+              </template>
+            </van-cell>
+          </van-cell-group>
+        </div>
+      </template>
+      <template v-else>
+        <van-empty description="暂无数据" />
+      </template>
+    </div>
+    <div class="bottomButton">
+      <van-button type="primary" class="w-full block" @click="addPaymentCollection">添加回款</van-button>
+    </div>
+
+    <!-- 添加回款 -->
+    <van-dialog v-model:show="showDialog" :title="`${dialogNumberVal.rowId ? '编辑' : '新增'}回款金额`" show-cancel-button
+      @confirm="addEditReceipt" :before-close="dialogCloseBefo">
+      <van-field v-model="dialogNumberVal.val" type="digit" label="回款金额" placeholder="请输入回款金额" />
+    </van-dialog>
+  </div>
+</template>
+
+<script setup>
+import { ref, watch } from 'vue';
+import { showConfirmDialog } from 'vant';
+import { useLifecycle } from '@hooks/useCommon.js';
+import { OBTAIN_SALES_ORDER_RECEIPTS, NEW_SALES_ORDER_PAYMENT_COLLECTION, SALES_ORDER_COLLECTION_EDITING, DELETE_SALES_ORDER_PAYMENT_RECORDS } from '@hooks/useApi'
+import requests from "@common/requests";
+import useShowToast from '@hooks/useToast'
+
+const { toastSuccess, toastFail, toastText } = useShowToast()
+const props = defineProps({
+  info: {
+    type: Object,
+    required: true,
+    default: () => ({})
+  }
+})
+const paymentPlanList = ref([])
+const showDialog = ref(false);
+const dialogNumberVal = ref({
+  rowId: null,
+  val: null
+})
+
+watch(() => props.info, (newValue) => {
+  processingData(newValue.id)
+})
+
+function deletePaymentCollection(row) {
+  showConfirmDialog({
+    message: `确定删除该回款记录吗?`,
+  }).then(() => {
+    requests.post(DELETE_SALES_ORDER_PAYMENT_RECORDS, { paymentId: row.id }).then(() => {
+      toastSuccess('操作成功')
+      processingData(props.info.id)
+    }).catch((err) => {
+      toastFail(err.msg ? err.msg : '删除失败')
+    })
+  })
+}
+
+function addEditReceipt() {
+  const { rowId, val } = dialogNumberVal.value
+  if (!val || val <= 0) {
+    toastText('请填写回款金额并且不能为负数')
+    return
+  }
+  const url = rowId ? SALES_ORDER_COLLECTION_EDITING : NEW_SALES_ORDER_PAYMENT_COLLECTION
+  const arrList = paymentPlanList.value.filter(item => item.id !== rowId)
+  const totalMoney = arrList.reduce((acc, item) => acc + item.money, 0);
+  const orderAmount = props.info.price
+  const formVal = {
+    [rowId ? 'paymentId' : 'orderId']: rowId ? rowId : props.info.id,
+    money: val,
+  }
+  if ((+totalMoney + val) > orderAmount) {
+    toastText('回款金额不能大于订单金额')
+    return
+  }
+  requests.post(url, formVal).then(() => {
+    toastSuccess('操作成功')
+    processingData(props.info.id)
+    showDialog.value = false
+  })
+}
+
+function addPaymentCollection() {
+  dialogNumberVal.value = { rowId: null, val: null }
+  showDialog.value = true
+}
+
+function editPaymentCollection(row) {
+  const { id, money } = row
+  dialogNumberVal.value = { rowId: id, val: money }
+  showDialog.value = true
+}
+
+function processingData(id) {
+  requests.post(OBTAIN_SALES_ORDER_RECEIPTS, { orderId: id }).then((res) => {
+    paymentPlanList.value = res.data.reverse()
+  })
+}
+
+function dialogCloseBefo(val) {
+  if (val == 'confirm' && showDialog.value) {
+    return false
+  }
+
+  return true
+}
+
+
+useLifecycle({
+  init: () => {
+    processingData(props.info.id)
+  }
+});
+</script>
+
+<style lang='scss' scoped>
+.paymentCollection {
+  .bottomButton {
+    margin: 0 14px;
+    padding-bottom: 30px;
+
+    :deep(.van-button) {
+      margin-bottom: 20px;
+    }
+  }
+
+  .info {
+    margin: 8px 4px 30px 4px;
+    padding: 10px
+  }
+}
+</style>

+ 1 - 0
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/product/newAndModifiedRelatedProducts.vue

@@ -71,6 +71,7 @@
       placeholder="请输入"
       placeholder="请输入"
       :max="form.inventory ? +form.inventory : 0"
       :max="form.inventory ? +form.inventory : 0"
       :min="0"
       :min="0"
+      @blur="inputNumberChange('quantity')"
       @input="inputNumberChange('quantity')"
       @input="inputNumberChange('quantity')"
     ></van-field>
     ></van-field>
     <van-field
     <van-field

+ 3 - 3
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/product/productInfo.vue

@@ -141,13 +141,13 @@ function confirmTransfer() {
 
 
 function claimAndClaim() {
 function claimAndClaim() {
   showConfirmDialog({
   showConfirmDialog({
-    title: '认领线索',
-    message: `确定认领【${props.info.clueName}】线索吗?`,
+    title: '认领产品',
+    message: `确定认领【${props.info.productName}】产品吗?`,
   }).then(() => {
   }).then(() => {
     requests.post(TRANSFER_PRODUCTS, { id: props.info.id, userId: userInfo.userInfo.id }).then((res) => {
     requests.post(TRANSFER_PRODUCTS, { id: props.info.id, userId: userInfo.userInfo.id }).then((res) => {
       toastSuccess('认领成功')
       toastSuccess('认领成功')
       listReloadData()
       listReloadData()
-      props.info.inchargerName = userInfo.userInfo.clueName
+      props.info.inchargerName = userInfo.userInfo.name
       showDialog.value = false
       showDialog.value = false
     })
     })
   })
   })

+ 1 - 1
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/tasks/addEditor.vue

@@ -3,7 +3,7 @@
     <div class="flex-1 overflow-y-auto">
     <div class="flex-1 overflow-y-auto">
       <van-form ref="vanFormRef" show-error :show-error-message="false" label-align="left" input-align="right"
       <van-form ref="vanFormRef" show-error :show-error-message="false" label-align="left" input-align="right"
         class="bg-white" @submit="onSubmit">
         class="bg-white" @submit="onSubmit">
-        <van-field v-model="vantFormVal.taskName" name="taskName" rows="2" label="任务名称" maxlength="100" required
+        <van-field v-model.trim="vantFormVal.taskName" name="taskName" rows="2" label="任务名称" maxlength="100" required
           show-word-limit type="textarea" placeholder="请输入" />
           show-word-limit type="textarea" placeholder="请输入" />
         <van-field v-model="vantFormVal.priority" name="priority" label="优先级" placeholder="请选择" is-link readonly
         <van-field v-model="vantFormVal.priority" name="priority" label="优先级" placeholder="请选择" is-link readonly
           required @click="showSelectionBox('priority', fixedFieldPriority)">
           required @click="showSelectionBox('priority', fixedFieldPriority)">

+ 18 - 0
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/thread/threadInfo.vue

@@ -16,6 +16,7 @@
       <van-cell title="备注" :value="info.remark" />
       <van-cell title="备注" :value="info.remark" />
     </div>
     </div>
     <div class="bottomButton">
     <div class="bottomButton">
+      <van-button type="primary" class="w-full block" v-if="info.inchargerName"  @click="transformBusinessOpportunities()">线索转商机</van-button>
       <van-button type="warning" class="w-full block" v-if="info.inchargerName"  @click="showDialogCli()">转移线索</van-button>
       <van-button type="warning" class="w-full block" v-if="info.inchargerName"  @click="showDialogCli()">转移线索</van-button>
       <van-button type="primary" class="w-full block" v-if="!info.inchargerName" @click="claimAndClaim()">认领线索</van-button>
       <van-button type="primary" class="w-full block" v-if="!info.inchargerName" @click="claimAndClaim()">认领线索</van-button>
       <van-button type="default" class="w-full block" v-permission="[routingInformation.jurisdiction.edit]" @click="jumpEdit()">编辑线索</van-button>
       <van-button type="default" class="w-full block" v-permission="[routingInformation.jurisdiction.edit]" @click="jumpEdit()">编辑线索</van-button>
@@ -70,6 +71,23 @@ const showDialog = ref(false);
 const showSelect = ref(false);
 const showSelect = ref(false);
 const dialogSelection = ref({});
 const dialogSelection = ref({});
 
 
+function transformBusinessOpportunities() {
+  const InfoJson = routingInfos['business']
+  const formJson = fixedData.formJson[InfoJson.key] || []
+  const formList = resetListData(formJson?.list)
+  const filedObj = getListFieldKey(formList, props.info)
+  const formVal = { ...filedObj, inchargerId: '', name: props.info?.clueName, clueId: props.info?.id }
+  router.redirectTo({
+    pathName: 'addEditor',
+    success: () => {
+      router.emit('addEditorParameter', {
+        routerInfo: JSON.stringify(InfoJson),
+        filedValue: JSON.stringify(formVal)
+      })
+    }
+  })
+}
+
 function deleteRow() {
 function deleteRow() {
   const { name = '', searchFiled = {}, deteleFiled = '' } = routingInformation
   const { name = '', searchFiled = {}, deteleFiled = '' } = routingInformation
   const row = props.info
   const row = props.info

+ 15 - 2
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/utility/customInstructions.js

@@ -1,6 +1,6 @@
 // 权限控制
 // 权限控制
 const PermissionDirective = { // 数组, 权限 code 和 布尔值,
 const PermissionDirective = { // 数组, 权限 code 和 布尔值,
-    updated(el, binding, vnode ) {
+    updated(el, binding, vnode) {
         const routePath = vnode.ctx.appContext.config.globalProperties.$route.path;
         const routePath = vnode.ctx.appContext.config.globalProperties.$route.path;
         const userInfo = JSON.parse(sessionStorage.getItem('userInfo') || '');
         const userInfo = JSON.parse(sessionStorage.getItem('userInfo') || '');
         const authorityCodes = (userInfo?.userInfo?.functionList || []).map(({ code }) => code);
         const authorityCodes = (userInfo?.userInfo?.functionList || []).map(({ code }) => code);
@@ -22,9 +22,22 @@ const PermissionDirective = { // 数组, 权限 code 和 布尔值,
     },
     },
 };
 };
 
 
+// 去掉输入框首尾空格的指令
+const TrimWhitespaceDirective = {
+    beforeMount(el) {
+        if (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA') {
+            // 监听输入事件,去掉首尾空格
+            el.addEventListener('input', () => {
+                el.value = el.value.trim();
+            });
+        }
+    }
+};
+
 // 导出的自定义指令
 // 导出的自定义指令
 const customize = [
 const customize = [
-    { key: 'permission', directive: PermissionDirective, name: '角色权限' }
+    { key: 'permission', directive: PermissionDirective, name: '角色权限' },
+    { key: 'trim-whitespace', directive: TrimWhitespaceDirective, name: '去除首尾空格' }
 ]
 ]
 
 
 export default customize;
 export default customize;

+ 5 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/AlertTimeController.java

@@ -35,6 +35,11 @@ public class AlertTimeController {
         timingTask.getTemporaryJobApplicationNew();
         timingTask.getTemporaryJobApplicationNew();
         return new HttpRespMsg();
         return new HttpRespMsg();
     }
     }
+    @RequestMapping("/getTemporaryJobApplicationOnlyString")
+    public HttpRespMsg getTemporaryJobApplicationOnlyString() throws Exception {
+        timingTask.getTemporaryJobApplicationOnlyString();
+        return new HttpRespMsg();
+    }
 
 
 }
 }
 
 

文件差异内容过多而无法显示
+ 248 - 72
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/task/TimingTask.java


+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -587,7 +587,7 @@
                     </el-form-item>
                     </el-form-item>
                     <!-- 增加合同金额字段 -->
                     <!-- 增加合同金额字段 -->
                     <el-form-item  :label="$t('contractamount')" v-if="(user.company.nonProjectSimple == 0 || (user.company.nonProjectSimple == 1 && addForm.isPublic == 0))">
                     <el-form-item  :label="$t('contractamount')" v-if="(user.company.nonProjectSimple == 0 || (user.company.nonProjectSimple == 1 && addForm.isPublic == 0))">
-                        <el-input id="contractAmount" v-model="addForm.contractAmount" :disabled="canOnlyModParticipator" style="width:32%;" @input="contractAmountChange(addForm.contractAmount)" :placeholder="$t('zheng-shu')" clearable  @keyup.native="restrictNumber('contractAmount')"></el-input><span style="margin-left:10px;position:absolute;">{{ $t('yuan') }}</span>
+                        <el-input id="contractAmount" v-model="addForm.contractAmount" :disabled="canOnlyModParticipator" style="width:32%;" @input="contractAmountChange(addForm.contractAmount)" :placeholder="$t('zheng-shu')" clearable maxlength="9"  @keyup.native="restrictNumber('contractAmount')"></el-input><span style="margin-left:10px;position:absolute;">{{ $t('yuan') }}</span>
                         <template v-if="title == $t('modifytheproject') && contractAmountReasonShow">
                         <template v-if="title == $t('modifytheproject') && contractAmountReasonShow">
                             <span style="margin-left:63px;margin-right:10px;">{{ $t('modifythereason') }}</span>
                             <span style="margin-left:63px;margin-right:10px;">{{ $t('modifythereason') }}</span>
                             <el-input v-model="addForm.changeContractReason" style="width:33%" clearable :placeholder="$t('contractamountasd')"></el-input>
                             <el-input v-model="addForm.changeContractReason" style="width:33%" clearable :placeholder="$t('contractamountasd')"></el-input>