Bladeren bron

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

Min 11 maanden geleden
bovenliggende
commit
10cfe8cc62

BIN
fhKeeper/formulahousekeeper/customerBuler-crm/src/assets/line.png


BIN
fhKeeper/formulahousekeeper/customerBuler-crm/src/assets/trend.png


+ 94 - 0
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/analysis/api.ts

@@ -0,0 +1,94 @@
+import { post, get } from '@/utils/request';
+
+export type RequestProps = {
+  /**
+   * @description 0-本月 1-本周 2-本年
+   */
+  dateType?: 0 | 1 | 2;
+  /**
+   * @description 0-仅本人 1-本人及下属 2-仅本部门 3-本部门及下属部门
+   */
+  queryType?: 0 | 1 | 2 | 3;
+  startDate?: string;
+  endDate?: string;
+};
+
+export type SummaryData = {
+  code: string;
+  data: {
+    clueDataSummary: {
+      changeNum: number;
+      newNum: number;
+    };
+    businessOpportunityDataSummary: {
+      winning: number;
+      allAmountOfMoney: number;
+      losting: number;
+      newNum: number;
+    };
+    customDataSummary: {
+      closeDealNum: number;
+      newNum: number;
+    };
+  };
+};
+
+export async function getSummaryData(
+  payload?: RequestProps
+): Promise<SummaryData> {
+  return await post('/order/dataSummary', payload);
+}
+
+export type StageData = {
+  code: string;
+  data: {
+    dataMap: {
+      stageName: string;
+      num: number;
+    }[];
+  };
+};
+
+export async function getStageData(payload?: RequestProps): Promise<StageData> {
+  return await post('/order/businessOpportunityStage', payload);
+}
+
+export type BulletinData = {
+  code: string;
+  data: {
+    custom: {
+      customPromote: string;
+      customCount: number;
+    };
+    businessOpportunity: {
+      businessOpportunityCount: number;
+      businessOpportunityPromote: string;
+    };
+    contacts: {
+      contactsCount: number;
+      contactsPromote: string;
+    };
+    salesOrder: {
+      salesOrderCount: number;
+      salesOrderPromote: string;
+    };
+    salesOrdersPrice: {
+      salesOrderPricePromote: string;
+      salesOrdersPrice: number;
+    };
+    clue: {
+      cluePromote: string;
+      clueCount: number;
+    };
+    businessOpportunityPrice: {
+      businessOpportunityPromote: string;
+      businessOpportunityPrice: number;
+    };
+  };
+};
+
+export async function getBulletinData(
+  payload?: RequestProps
+): Promise<BulletinData> {
+  return await post('/order/salesKit', payload);
+}

+ 13 - 3
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/analysis/components/SimpleCard.vue

@@ -2,10 +2,20 @@
   <div
     class="bg-gray-200 rounded-sm p-2 flex flex-col gap-1 text-xs text-gray-600"
   >
-    <span>转成交易</span>
+    <span>{{ title }}</span>
     <span class="text-gray-900">
-      <span>{{ 1 }}</span>
-      {{ '个' }}
+      <span>{{ number === null || number === undefined ? '--' : number }}</span>
+      {{ unit }}
     </span>
   </div>
 </template>
+
+<script lang="ts" setup>
+type Props = {
+  title: string;
+  number?: number;
+  unit: '个' | '人' | '元';
+};
+
+defineProps<Props>();
+</script>

+ 24 - 6
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/analysis/components/TrendCard.vue

@@ -3,25 +3,43 @@
     <div class="flex flex-col justify-between text-gray-500 text-xs gap-1">
       <div class="">{{ title }}</div>
       <div class="text-gray-800">
-        <span class="text-sm">{{ number }}</span>
+        <span class="text-sm">{{
+          number === null || number === undefined ? '--' : number
+        }}</span>
         {{ unit }}
       </div>
       <div>
         <span>较上月 </span>
-        <span class="text-xs text-red-600 inline-flex items-center">
-          <span>100%</span>
-          <el-icon><Top /></el-icon>
+        <span
+          class="text-xs text-red-600 inline-flex items-center"
+          v-if="compare"
+        >
+          <span>{{ compare.includes('-') ? compare.slice(1) : compare }}</span>
+          <el-icon class="mt-0.5">
+            <Bottom v-if="compare.includes('-')" />
+            <Top v-else />
+          </el-icon>
         </span>
+        <span v-else>--</span>
       </div>
     </div>
-    <div>11</div>
+    <div>
+      <img
+        width="60"
+        :style="{
+          transform: compare?.includes('-') ? 'rotate(66deg)' : 'rotate(180deg)'
+        }"
+        src="../../../assets/line.png"
+      />
+    </div>
   </div>
 </template>
 
 <script lang="ts" setup>
 type Props = {
+  compare?: string;
   title: string;
-  number: number;
+  number?: number;
   unit: '个' | '人' | '元';
 };
 

+ 317 - 41
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/analysis/index.vue

@@ -1,18 +1,74 @@
 <script lang="ts" setup>
-import { ref, reactive } from 'vue';
+import { ref, reactive, onMounted, watchEffect } from 'vue';
 import TrendCard from './components/TrendCard.vue';
 import SimpleCard from './components/SimpleCard.vue';
 import Divider from './components/Divider.vue';
 import Echarts from '@/components/ReEcharts/index.vue';
 import { EChartsOption } from 'echarts';
+import { dayjs } from 'element-plus';
+import {
+  getSummaryData,
+  getBulletinData,
+  BulletinData,
+  getStageData,
+  RequestProps,
+  StageData,
+  SummaryData
+} from './api';
 
-const prompt = reactive({ summary: {}, stage: {}, bulletin: {} });
+const permissionOptions = [
+  {
+    label: '仅本人',
+    value: 0
+  },
+  {
+    label: '本人及下属',
+    value: 1
+  },
+  {
+    label: '仅本部门',
+    value: 2
+  },
+  {
+    label: '本部门及下属部门',
+    value: 3
+  }
+];
+const dateOptions = [
+  {
+    label: '本月',
+    value: 0
+  },
+  {
+    label: '本周',
+    value: 1
+  },
+  {
+    label: '本年',
+    value: 2
+  }
+];
 
-const option: EChartsOption = {
+const defineDate = ref<[Date, Date] | ''>('');
+
+const bulletinPrompt = reactive({ permission: undefined, date: undefined });
+const summaryPrompt = reactive({ permission: undefined, date: undefined });
+const stagePrompt = reactive({ permission: undefined, date: undefined });
+
+const requestData = reactive<{
+  bulletin: BulletinData['data'] | null;
+  summary: SummaryData['data'] | null;
+  stage: StageData['data'] | null;
+}>({
+  summary: null,
+  stage: null,
+  bulletin: null
+});
+
+const chartOptions: EChartsOption = reactive({
   grid: { top: 0, bottom: 20, left: 60 },
   yAxis: {
-    type: 'category',
-    data: ['验证客户', '赢单', '输单']
+    type: 'category'
   },
   xAxis: {
     type: 'value'
@@ -20,11 +76,67 @@ const option: EChartsOption = {
   series: [
     {
       barWidth: 20,
-      data: [0, 20, 40, 60, 80, 100],
+      data: [10, 30, 30, 30, 30],
       type: 'bar'
     }
   ]
+});
+
+const queryBulletin = async (payload?: RequestProps) => {
+  const bulletinResult = await getBulletinData(payload);
+  requestData.bulletin = bulletinResult.data;
 };
+
+const querySummary = async (payload?: RequestProps) => {
+  const summaryResult = await getSummaryData(payload);
+  requestData.summary = summaryResult.data;
+};
+
+const queryStage = async (payload?: RequestProps) => {
+  const stageResult = await getStageData(payload);
+  const data = stageResult.data;
+
+  // @ts-ignore
+  chartOptions.yAxis.data = data.dataMap.map((map) => map.stageName);
+  // @ts-ignore
+  chartOptions.series[0].data = data.dataMap.map((map) => map.num);
+};
+
+watchEffect(() => {
+  queryBulletin({
+    ...(bulletinPrompt.date === 'defineDate'
+      ? {
+          startDate: dayjs(defineDate.value[0]).valueOf(),
+          endData: dayjs(defineDate.value[1]).valueOf()
+        }
+      : { dateType: bulletinPrompt.date }),
+    queryType: bulletinPrompt.permission
+  });
+});
+
+watchEffect(() => {
+  queryStage({
+    ...(stagePrompt.date === 'defineDate'
+      ? {
+          startDate: dayjs(defineDate.value[0]).valueOf(),
+          endData: dayjs(defineDate.value[1]).valueOf()
+        }
+      : { dateType: stagePrompt.date }),
+    queryType: stagePrompt.permission
+  });
+});
+
+watchEffect(() => {
+  querySummary({
+    ...(summaryPrompt.date === 'defineDate'
+      ? {
+          startDate: dayjs(defineDate.value[0]).valueOf(),
+          endData: dayjs(defineDate.value[1]).valueOf()
+        }
+      : { dateType: summaryPrompt.date }),
+    queryType: summaryPrompt.permission
+  });
+});
 </script>
 
 <template>
@@ -34,25 +146,98 @@ const option: EChartsOption = {
     <section class="flex-[4]">
       <div class="flex gap-3 mb-4">
         <div class="w-40">
-          <el-select size="small"></el-select>
+          <el-select
+            clearable
+            size="small"
+            :model-value="bulletinPrompt.permission"
+            @change="(value) => (bulletinPrompt.permission = value)"
+          >
+            <el-option
+              v-for="permission in permissionOptions"
+              :label="permission.label"
+              :value="permission.value"
+            />
+          </el-select>
         </div>
         <div class="w-40">
-          <el-select size="small"></el-select>
+          <el-select
+            clearable
+            size="small"
+            :model-value="bulletinPrompt.date"
+            @change="(value) => (bulletinPrompt.date = value)"
+          >
+            <el-option
+              v-for="date in dateOptions"
+              :label="date.label"
+              :value="date.value"
+            />
+            <el-option v-if="defineDate" label="自定义" value="defineDate" />
+          </el-select>
         </div>
       </div>
       <div class="border-gray-200 border rounded p-3">
         <div class="flex gap-1.5 items-center mb-3">
+          <img width="16" src="../../assets/trend.png" />
           <div class="text-sm font-medium">销售简报</div>
           <el-icon><QuestionFilled class="text-gray-500 text-sm" /></el-icon>
         </div>
         <div class="grid xl:grid-cols-4 lg:grid-cols-3 grid-cols-2 gap-4">
-          <TrendCard title="新增客户" :number="4" unit="人" />
-          <TrendCard title="新增联系人" :number="4" unit="人" />
-          <TrendCard title="新增商机" :number="4" unit="个" />
-          <TrendCard title="新增销售订单" :number="4" unit="个" />
-          <TrendCard title="销售订单金额" :number="4" unit="元" />
-          <TrendCard title="商机金额" :number="4" unit="元" />
-          <TrendCard title="新增线索" :number="4" unit="个" />
+          <TrendCard
+            title="新增客户"
+            unit="人"
+            :number="requestData?.bulletin?.custom.customCount"
+            :compare="requestData?.bulletin?.custom.customPromote"
+          />
+          <TrendCard
+            title="新增联系人"
+            unit="人"
+            :number="requestData?.bulletin?.contacts.contactsCount"
+            :compare="requestData?.bulletin?.contacts.contactsPromote"
+          />
+          <TrendCard
+            title="新增商机"
+            unit="个"
+            :number="
+              requestData?.bulletin?.businessOpportunity
+                .businessOpportunityCount
+            "
+            :compare="
+              requestData?.bulletin?.businessOpportunity
+                .businessOpportunityPromote
+            "
+          />
+          <TrendCard
+            title="新增销售订单"
+            unit="个"
+            :number="requestData?.bulletin?.salesOrder.salesOrderCount"
+            :compare="requestData?.bulletin?.salesOrder.salesOrderPromote"
+          />
+          <TrendCard
+            title="销售订单金额"
+            unit="元"
+            :number="requestData?.bulletin?.salesOrdersPrice.salesOrdersPrice"
+            :compare="
+              requestData?.bulletin?.salesOrdersPrice.salesOrderPricePromote
+            "
+          />
+          <TrendCard
+            title="商机金额"
+            unit="元"
+            :number="
+              requestData?.bulletin?.businessOpportunityPrice
+                .businessOpportunityPrice
+            "
+            :compare="
+              requestData?.bulletin?.businessOpportunityPrice
+                .businessOpportunityPromote
+            "
+          />
+          <TrendCard
+            title="新增线索"
+            unit="个"
+            :number="requestData?.bulletin?.clue.clueCount"
+            :compare="requestData?.bulletin?.clue.cluePromote"
+          />
         </div>
       </div>
       <div class="my-8 flex gap-4 items-start">
@@ -60,67 +245,158 @@ const option: EChartsOption = {
           <div class="text-sm font-medium">数据汇总</div>
           <div class="flex gap-3 mb-8 mt-2">
             <div class="w-40">
-              <el-select size="small"></el-select>
+              <el-select
+                clearable
+                size="small"
+                :model-value="summaryPrompt.permission"
+                @change="(value) => (summaryPrompt.permission = value)"
+              >
+                <el-option
+                  v-for="permission in permissionOptions"
+                  :label="permission.label"
+                  :value="permission.value"
+                />
+              </el-select>
             </div>
             <div class="w-40">
-              <el-select size="small"></el-select>
+              <el-select
+                clearable
+                size="small"
+                :model-value="summaryPrompt.date"
+                @change="(value) => (summaryPrompt.date = value)"
+              >
+                <el-option
+                  v-for="date in dateOptions"
+                  :label="date.label"
+                  :value="date.value"
+                />
+                <el-option
+                  v-if="defineDate"
+                  label="自定义"
+                  value="defineDate"
+                />
+              </el-select>
             </div>
           </div>
           <Divider title="客户汇总" />
           <div class="my-6 grid grid-cols-4 gap-2">
-            <SimpleCard />
-            <SimpleCard />
-            <SimpleCard />
-            <SimpleCard />
+            <SimpleCard
+              title="新增客户"
+              unit="个"
+              :number="requestData.summary?.customDataSummary.newNum"
+            />
+            <SimpleCard
+              title="转成交客户"
+              unit="个"
+              :number="requestData.summary?.customDataSummary.closeDealNum"
+            />
           </div>
           <Divider title="商机汇总" />
           <div class="my-6 grid grid-cols-4 gap-2">
-            <SimpleCard />
-            <SimpleCard />
-            <SimpleCard />
-            <SimpleCard />
+            <SimpleCard
+              title="新增商机"
+              unit="个"
+              :number="
+                requestData.summary?.businessOpportunityDataSummary.newNum
+              "
+            />
+            <SimpleCard
+              title="赢单商机"
+              unit="个"
+              :number="
+                requestData.summary?.businessOpportunityDataSummary.winning
+              "
+            />
+            <SimpleCard
+              title="输单商机"
+              unit="个"
+              :number="
+                requestData.summary?.businessOpportunityDataSummary.losting
+              "
+            />
+            <SimpleCard
+              title="商机总金额"
+              unit="元"
+              :number="
+                requestData.summary?.businessOpportunityDataSummary
+                  .allAmountOfMoney
+              "
+            />
           </div>
           <Divider title="线索汇总" />
           <div class="my-6 grid grid-cols-4 gap-2">
-            <SimpleCard />
-            <SimpleCard />
-            <SimpleCard />
-            <SimpleCard />
+            <SimpleCard
+              title="新增线索"
+              unit="个"
+              :number="requestData.summary?.clueDataSummary.newNum"
+            />
+            <SimpleCard
+              title="线索转商机"
+              unit="个"
+              :number="requestData.summary?.clueDataSummary.changeNum"
+            />
           </div>
         </div>
         <div class="border-gray-200 border rounded p-3 flex-1">
           <div class="text-sm font-medium">商机阶段</div>
           <div class="flex gap-3 mb-8 mt-2">
             <div class="w-40">
-              <el-select size="small"></el-select>
+              <el-select
+                clearable
+                size="small"
+                :model-value="stagePrompt.permission"
+                @change="(value) => (stagePrompt.permission = value)"
+              >
+                <el-option
+                  v-for="permission in permissionOptions"
+                  :label="permission.label"
+                  :value="permission.value"
+                />
+              </el-select>
             </div>
             <div class="w-40">
-              <el-select size="small"></el-select>
+              <el-select
+                clearable
+                size="small"
+                :model-value="stagePrompt.date"
+                @change="(value) => (stagePrompt.date = value)"
+              >
+                <el-option
+                  v-for="date in dateOptions"
+                  :label="date.label"
+                  :value="date.value"
+                />
+                <el-option
+                  v-if="defineDate"
+                  label="自定义"
+                  value="defineDate"
+                />
+              </el-select>
             </div>
           </div>
           <div class="h-60">
-            <Echarts :option="option"></Echarts>
+            <Echarts :option="chartOptions"></Echarts>
           </div>
         </div>
       </div>
     </section>
-    <nav class="flex-1 min-w-60 sticky right-0 top-9">
+    <nav class="flex-1 min-w-60 sticky right-0 top-9 max-lg:hidden">
       <div class="border border-gray-200 rounded w-3/4 text-sm text-gray-500">
-        <div class="p-2 bg-sky-100 border-l-2 border-blue-700">仅本人</div>
-        <div class="p-2">本人及下属</div>
-        <div class="p-2">仅本部门</div>
-        <div class="p-2">本部门及下属</div>
+        <div class="p-2" v-for="primission in permissionOptions">
+          {{ primission.label }}
+        </div>
       </div>
       <div class="border border-gray-200 rounded text-sm text-gray-500 mt-4">
-        <div class="p-2 bg-sky-100 border-l-2 border-blue-700">本月</div>
-        <div class="p-2">本周</div>
-        <div class="p-2">本年</div>
+        <div class="p-2" v-for="date in dateOptions">{{ date.label }}</div>
         <div class="p-2">
           <div>自定义</div>
           <el-date-picker
             type="daterange"
             class="max-w-full mt-2"
-          ></el-date-picker>
+            v-model="defineDate"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+          />
         </div>
       </div>
     </nav>

+ 74 - 39
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/corpreport/index.vue

@@ -1,42 +1,33 @@
-<template>
-  <div class="m-5 bg-white h-full p-4 rounded">
-    <div class="flex justify-start">
-      <span class="mr-12 font-bold text-gray-900">客户总量分析</span>
-      <el-form class="flex gap-4">
-        <el-form-item class="w-52">
-          <el-select>
-            <el-option
-              v-for="date in dateOptions"
-              :key="date.value"
-              :label="date.label"
-              :value="date.value"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item class="w-52">
-          <el-select>
-            <el-option label="按部门" value="1" />
-            <el-option label="按员工" value="2" />
-          </el-select>
-        </el-form-item>
-        <el-form-item class="w-52">
-          <el-select></el-select>
-        </el-form-item>
-        <el-button type="primary">搜索</el-button>
-      </el-form>
-    </div>
-    <el-table :data="dataSource">
-      <el-table-column prop="date" label="员工姓名" />
-      <el-table-column prop="date" label="新增客户数" />
-      <el-table-column prop="date" label="成交客户数" />
-      <el-table-column prop="date" label="客户成交率(%)" />
-      <el-table-column prop="date" label="合同总金额" />
-      <el-table-column prop="date" label="回款金额" />
-    </el-table>
-  </div>
-</template>
-
 <script lang="ts" setup>
+import { ref, reactive, onMounted, watchEffect } from 'vue';
+
+import Echarts from '@/components/ReEcharts/index.vue';
+import { EChartsOption } from 'echarts';
+
+const chartOptions: EChartsOption = {
+  grid: { bottom: 30 },
+  legend: {},
+  tooltip: {},
+  dataset: {
+    dimensions: ['product', '2015', '2016', '2017'],
+    source: [
+      { product: 'Matcha Latte', 2015: 43.3, 2016: 85.8, 2017: 93.7 },
+      { product: 'Milk Tea', 2015: 83.1, 2016: 73.4, 2017: 55.1 },
+      { product: 'Cheese Cocoa', 2015: 86.4, 2016: 65.2, 2017: 82.5 },
+      { product: 'Walnut Brownie', 2015: 72.4, 2016: 53.9, 2017: 39.1 }
+    ]
+  },
+  xAxis: { type: 'category' },
+  yAxis: {},
+  // Declare several bar series, each will be mapped
+  // to a column of dataset.source by default.
+  series: [
+    { type: 'bar', barWidth: 20 },
+    { type: 'bar', barWidth: 20 },
+    { type: 'bar', barWidth: 20 }
+  ]
+};
+
 const dateOptions = [
   { label: '今天', value: '1' },
   { label: '昨天', value: '2' },
@@ -71,4 +62,48 @@ const dataSource = [
 ];
 </script>
 
-<style lang="scss" scoped></style>
+<template>
+  <div class="m-5 bg-white h-full p-4 rounded">
+    <div class="flex justify-between">
+      <el-form class="flex gap-4">
+        <el-form-item class="w-28">
+          <el-select>
+            <el-option
+              v-for="date in dateOptions"
+              :key="date.value"
+              :label="date.label"
+              :value="date.value"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item class="w-28">
+          <el-select>
+            <el-option label="按部门" value="1" />
+            <el-option label="按员工" value="2" />
+          </el-select>
+        </el-form-item>
+        <el-form-item class="w-52">
+          <el-select></el-select>
+        </el-form-item>
+        <el-button type="primary">搜索</el-button>
+      </el-form>
+      <el-tabs type="card">
+        <el-tab-pane label="客户总量分析" name="first" />
+        <el-tab-pane label="客户转化率分析" name="first" />
+        <el-tab-pane label="合同数量分析" name="first" />
+      </el-tabs>
+      <!-- <span class="mr-12 font-bold text-gray-900">客户总量分析</span> -->
+    </div>
+    <div class="h-96">
+      <Echarts :option="chartOptions"></Echarts>
+    </div>
+    <el-table :data="dataSource">
+      <el-table-column prop="date" label="员工姓名" />
+      <el-table-column prop="date" label="新增客户数" />
+      <el-table-column prop="date" label="成交客户数" />
+      <el-table-column prop="date" label="客户成交率(%)" />
+      <el-table-column prop="date" label="合同总金额" />
+      <el-table-column prop="date" label="回款金额" />
+    </el-table>
+  </div>
+</template>

+ 3 - 0
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/customer/api.ts

@@ -1,6 +1,9 @@
 export const MOD = '/customer'
+export const IMPORTMOD = 'Customer'
+export const PREFIX = '/custom'
 export const GETSYSFILED = '/sys-dict/getListByCode'
 export const GETPERSONNEL = '/user/getSimpleActiveUserList'
+export const URL_TABLELIST = `${PREFIX}/list`
 
 export const stageStatus = [
     { id: 1, name: "赢单", progress: "100%" },

+ 9 - 2
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/customer/index.vue

@@ -99,7 +99,7 @@
 
 <script lang="ts" setup>
 import { ref, reactive, onMounted, inject } from "vue";
-import { MOD, GETSYSFILED, GETPERSONNEL } from './api.ts'
+import { MOD, GETSYSFILED, GETPERSONNEL, URL_TABLELIST } from './api.ts'
 import { getAllListByCode, getFromValue, resetFromValue, getFirstDayOfMonth, getLastDayOfMonth, formatDate } from '@/utils/tools'
 import { post, get } from "@/utils/request";
 import { useRouter, useRoute } from "vue-router";
@@ -151,6 +151,7 @@ const customerCriteriaForm = reactive<customerCriteriaFormType>({ // 筛选条
   pageIndex: 1,
   pageFrom: 10
 })
+const clueTableTotal = ref(0)
 const allLoading = reactive({
   clueTableLading: false,
 })
@@ -193,7 +194,13 @@ function toCustomerTableDetail(_row: any) {
 
 function getClueTable() {
   let valueForm = getFromValue(customerCriteriaForm)
-  console.log(valueForm, '<=== valueForm')
+  post(URL_TABLELIST, { ...valueForm}).then((res) => {
+    const { data, total } = res.data
+    clueTable.value = data
+    clueTableTotal.value = total
+  }).finally(() => {
+
+  })
 }
 
 async function getSystemField() {

+ 3 - 2
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/system/customForm/index.vue

@@ -31,7 +31,7 @@
           <el-button type="primary" @click="updateJson()" v-loading="AllLoading.createFormLoading">
             保存
           </el-button>
-          <div @click="setData()">设置数据</div>
+          <!-- <div @click="setData()">设置数据</div> -->
         </div>
       </template>
     </el-dialog>
@@ -178,7 +178,8 @@ function setData() {
   // let data = JSON.parse(localStorage.getItem('threadDataJson') || '')
   // let data = JSON.parse(localStorage.getItem('business') || '')
   // let data = JSON.parse(localStorage.getItem('tasks') || '')
-  let data = JSON.parse(localStorage.getItem('product') || '')
+  // let data = JSON.parse(localStorage.getItem('product') || '')
+  let data = JSON.parse(localStorage.getItem('kehu') || '')
   data.list.forEach((element: any) => {
     element.allDisable = true
   });

+ 16 - 16
fhKeeper/formulahousekeeper/customerBuler-crm/vite.config.ts

@@ -1,40 +1,40 @@
-import { defineConfig } from "vite";
-import vue from "@vitejs/plugin-vue";
+import { defineConfig } from 'vite';
+import vue from '@vitejs/plugin-vue';
 
-import { resolve } from "path";
+import { resolve } from 'path';
 
-// const target = "http://192.168.2.8:10080";
+const target = 'http://192.168.2.8:10010';
 // const target = "http://127.0.0.1:10010";
 // const target = "http://192.168.2.178:10010";
-const target = "http://47.101.180.183:10010";
+// const target = 'http://47.101.180.183:10010';
 
 export default defineConfig({
   plugins: [vue()],
   server: {
-    host: "0.0.0.0",
+    host: '0.0.0.0',
     port: 19123,
     open: true,
     proxy: {
-      "/api": {
+      '/api': {
         // 这里的'/api'表示需要转发到的接口路径前缀
         target, // 将请求转发到的目标地址
         changeOrigin: true, // 支持跨域
-        rewrite: (path) => path.replace(/^\/api/, ""), // 去除请求路径中的'/api'前缀
-      },
-    },
+        rewrite: (path) => path.replace(/^\/api/, '') // 去除请求路径中的'/api'前缀
+      }
+    }
   },
   resolve: {
     alias: {
-      "@": resolve(__dirname, "./src"),
+      '@': resolve(__dirname, './src')
     },
-    extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue"],
+    extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']
   },
   css: {
     preprocessorOptions: {
       scss: {
         additionalData: '@import "@/styles/global.scss";'
-      },
-    },
+      }
+    }
   },
 
   build: {
@@ -47,8 +47,8 @@ export default defineConfig({
         manualChunks: {
           vue: ['vue', 'vue-router', 'vuex'],
           echarts: ['echarts']
-        },
-      },
+        }
+      }
     }
   }
 });

+ 1 - 1
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/BusinessOpportunityController.java

@@ -218,7 +218,7 @@ public class BusinessOpportunityController {
 
     @RequestMapping("saveStage")
     public HttpRespMsg insertStage(List<Stage> stages, HttpServletRequest request) {
-        return stageService.changeStage(stages);
+        return stageService.changeStage(stages,request);
     }
     @RequestMapping("getStage")
     public HttpRespMsg Stage() {

+ 2 - 1
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/StageService.java

@@ -4,6 +4,7 @@ import com.management.platform.entity.Stage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.management.platform.util.HttpRespMsg;
 
+import javax.servlet.http.HttpServletRequest;
 import java.util.List;
 
 /**
@@ -16,7 +17,7 @@ import java.util.List;
  */
 public interface StageService extends IService<Stage> {
 
-    HttpRespMsg changeStage(List<Stage> stages);
+    HttpRespMsg changeStage(List<Stage> stages, HttpServletRequest request);
 
     HttpRespMsg getStage();
 }

+ 2 - 1
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/StageServiceImpl.java

@@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.servlet.http.HttpServletRequest;
 import java.util.List;
 
 /**
@@ -27,7 +28,7 @@ public class StageServiceImpl extends ServiceImpl<StageMapper, Stage> implements
     private StageMapper stageMapper;
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public HttpRespMsg changeStage(List<Stage> stages) {
+    public HttpRespMsg changeStage(List<Stage> stages, HttpServletRequest request) {
         HttpRespMsg msg = new HttpRespMsg();
         int i = 0;
         for (Stage stage : stages) {