Jelajahi Sumber

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

zhouyy 4 bulan lalu
induk
melakukan
4556a27ec5

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

@@ -45,6 +45,7 @@ export const CUSTOMER_ADDED_EDITOR = `/custom/insertAndUpdate` // 客户新增
 export const CONTACT_PERSON_ADDITION_EDITOR = `/contacts/addContacts` // 联系人新增编辑
 export const TASK_ADD_EDIT = `/tasks/addTask` // 任务新增
 export const MODIFY_TASK = `/tasks/updateTask` // 任务编辑
+export const TASK_OPERATION = `/tasks/updateTaskStatus` // 任务操作
 export const PRODUCT_ADD_EDITOR = `/product/addOrUpdate` // 产品新增编辑
 export const CONTRACT_ADDITION_EDITING = `/contract/addContract` // 合同新增编辑
 export const ORDER_ADDITION_EDITING = `/order/addOrUpdate` // 订单新增编辑
@@ -61,7 +62,7 @@ export const GET_ORDER_RELATED_TASKS = `/order/taskWithOrder` // 获取销售订
 export const OBTAIN_ORDER_RELATED_PRODUCTS = `/order/productWithOrder` // 获取销售订单关联产品
 export const OBTAIN_DETAILS_OF_THE_VISIT_PLAN = `/visitPlan/getVisitPlanDetail` // 获取访客计划详情
 export const GET_PRODUCT_DETAILS = `/product/detail` // 获取产品详情
-
+export const GET_TASK_DETAILS = `/tasks/getTaskDetail` // 获取任务详情
 export const SELL_AND_OBTAIN_RELATED_PRODUCTS = `/product/orderWithProduct` // 销售订单关联产品
 
 export const GET_CONTACTS_WITH_MORE_I_DS = `/contacts/getAllContacts` // 更具Id获取联系人

+ 26 - 0
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/moduleDetails/index.vue

@@ -36,13 +36,21 @@
         </template>
       </div>
     </template>
+
+    <template v-slot:headerRight>
+      <template v-if="currentRoutingInformation?.key == 'tasks'">
+        <div class="themeTextColor" @click="jumpEdit()">编辑</div>
+      </template>
+    </template>
   </Page>
 </template>
 
 <script setup>
 import { ref } from 'vue';
 import { useLifecycle } from '@hooks/useCommon.js';
+import { resetListData, getListFieldKey } from '@components/common/formForm/formCorrespondenceProcessing'
 import useRouterStore from "@store/useRouterStore.js";
+import useFixedData from "@store/useFixedData.js"
 
 import Business from "@pages/pageComponents/business/detail.vue"
 import Thread from "@pages/pageComponents/thread/detail.vue"
@@ -53,6 +61,7 @@ import Product from "@pages/pageComponents/product/detail.vue"
 import Contract from "@pages/pageComponents/contract/detail.vue"
 import Order from "@pages/pageComponents/order/detail.vue"
 
+const fixedData = useFixedData()
 const router = useRouterStore()
 const queryParameters = ref({})
 const currentRoutingInformation = ref({})
@@ -62,6 +71,23 @@ function reloadListData(data) {
   currentRoutingInformation.value = JSON.parse(routerInfo)
 }
 
+function jumpEdit() {
+  const formJson = fixedData.formJson[currentRoutingInformation.value.key] || []
+  const formList = resetListData(formJson?.list)
+  const filedObj = getListFieldKey(formList, queryParameters.value)
+  const formVal = { ...queryParameters.value, ...filedObj, id: queryParameters.value.id }
+  console.log(formVal, '<=== formVal')
+  router.navigateTo({
+    pathName: 'addEditor',
+    success: () => {
+      router.emit('addEditorParameter', {
+        routerInfo: JSON.stringify(currentRoutingInformation.value),
+        filedValue: JSON.stringify(formVal)
+      })
+    }
+  })
+}
+
 useLifecycle({
   load: () => {
     router.on('detailParameter', (data) => {

+ 107 - 9
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/tasks/detail.vue

@@ -1,16 +1,58 @@
 <template>
-  <div class="w-full h-full flex-col">
+  <div class="w-full h-full flex flex-col">
     <div class="bg-white info flex-1 overflow-y-auto">
-      <van-cell title="任务名称" :value="''" />
-      <van-cell title="优先级" :value="''" />
+      <van-cell title="任务名称" :value="infoData.taskName" />
+      <van-cell title="优先级">
+        <template #default>
+          {{ fixedFieldPriority.find(subItem => subItem.value == infoData.priority)?.label || '' }}
+        </template>
+      </van-cell>
+      <van-cell title="状态" :value="''">
+        <template #default>
+          <div :style="`color: ${fixedFieldTaskStatus.find(subItem => subItem.value == infoData.status)?.color}`">
+            {{ fixedFieldTaskStatus.find(subItem => subItem.value == infoData.status)?.label || '' }}
+          </div>
+        </template>
+      </van-cell>
+      <van-cell title="执行人">
+        <template #default>
+          <TranslationComponent :openId="infoData.taskExecutors" />
+        </template>
+      </van-cell>
+      <van-cell title="开始时间" :value="infoData.startDate" />
+      <van-cell title="截至时间" :value="infoData.endDate" />
+      <van-cell title="客户名称" :value="infoData.customName" v-if="infoData.customName" />
+      <van-cell title="商机名称" :value="infoData.businessName" v-if="infoData.businessName" />
+      <van-cell title="销售订单" :value="infoData.orderName" v-if="infoData.orderName" />
+      <van-cell title="线索名称" :value="infoData.clueName" v-if="infoData.clueName" />
+      <van-cell title="联系人名称" :value="infoData.contactsName" v-if="!infoData.clueId" />
+      <van-cell title="联系人号码" :value="infoData.contactsPhone" v-if="!infoData.clueId" />
+    </div>
+    <div class="bottomButton">
+      <van-button type="success" class="w-full block" @click="completeTheTask(2)" v-if="infoData.status != 2">完成任务</van-button>
+      <van-button type="primary" class="w-full block" @click="completeTheTask(0)" v-if="infoData.status == 2">重启任务</van-button>
+      <van-button type="danger" class="w-full block" @click="deleteTask">删除任务</van-button>
     </div>
   </div>
 </template>
 
 <script setup>
-import { ref } from 'vue';
+import { ref, watch } from 'vue';
+import { showConfirmDialog } from 'vant';
 import { useLifecycle } from '@hooks/useCommon.js';
+import { GET_TASK_DETAILS, TASK_OPERATION } from "@hooks/useApi"
+import requests from "@common/requests";
+import { fixedFieldPaymentStatus, fixedFieldPriority, fixedFieldTaskStatus, fixedFieldStatusArray } from "@utility/defaultData"
+import useShowToast from '@hooks/useToast'
+import { routingInfos } from "@utility/generalVariables"
+import useInfoStore from '@store/useInfoStore'
+import useFixedData from "@store/useFixedData.js"
+import useRouterStore from "@store/useRouterStore.js";
 
+const router = useRouterStore()
+const fixedData = useFixedData()
+const userInfo = useInfoStore()
+const { toastSuccess, toastFail, toastText } = useShowToast()
 const props = defineProps({
   info: {
     type: Object,
@@ -18,25 +60,81 @@ const props = defineProps({
     default: () => ({})
   }
 })
+const routingInformation = routingInfos['tasks']
+const infoData = ref(props.info);
+const timeout = ref(null);
+
+watch(() => props.info, (newValue) => {
+  initializeData(newValue.id)
+})
+
+function completeTheTask(status) {
+  const id = infoData.value.id
+  requests.post(TASK_OPERATION, { id, status }).then(({ data }) => {
+    toastSuccess('操作成功')
+    getTaskDetails(id)
+  })
+}
 
-function getTaskDetails() {
-  
+function deleteTask() {
+  const { name = '', searchFiled = {}, deteleFiled = '' } = routingInformation
+  const row = infoData.value
+  const foemVal = { [routingInformation.key == 'tasks' ? 'taskIds' : 'ids']: row.id }
+  showConfirmDialog({
+    title: `删除${name}`,
+    message: `确定删除【${row[searchFiled?.search]}】${name}吗?`,
+  }).then(() => {
+    requests.post(deteleFiled, { ...foemVal }).then((res) => {
+      toastSuccess('删除成功')
+      router.navigateBack({
+        success: () => {
+          router.emit('moduleListDetailParameter', {
+            row: JSON.stringify(routingInformation)
+          })
+        }
+      })
+    }).catch((err) => {
+      toastFail(err.msg ? err.msg : '删除失败')
+    })
+  })
 }
 
-function initializeData() {
+function getTaskDetails(id) {
+  requests.post(GET_TASK_DETAILS, { id }).then(({ data }) => {
+    infoData.value = data
+  })
+}
 
+function initializeData(id) {
+  clearTimeout(timeout.value);
+  timeout.value = setTimeout(() => {
+    getTaskDetails(id)
+  }, 100);
 }
 
 useLifecycle({
   load: () => {
-    initializeData()
+    initializeData(props.info.id)
   },
   init: () => {
-    initializeData()
+    initializeData(props.info.id)
+  },
+  unLoad: () => {
+    clearTimeout(timeout.value);
   }
 });
 </script>
 
 <style lang='scss' scoped>
+.bottomButton {
+  margin: 0 14px;
+  padding-bottom: 30px;
 
+  :deep(.van-button) {
+    margin-bottom: 20px;
+  }
+}
+.info {
+  margin: 8px 14px 30px 14px;
+}
 </style>