Explorar o código

Merge remote-tracking branch 'origin/master'

yusm hai 1 ano
pai
achega
aefe76ad76

+ 5 - 3
fhKeeper/formulahousekeeper/customerBuler-crm/src/main.ts

@@ -9,7 +9,7 @@ import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
 import App from './App.vue'
 import router from './router/index'
 import * as echarts from 'echarts';
-
+import zhCn from "element-plus/dist/locale/zh-cn.mjs";
 const app = createApp(App)
 const pinia = createPinia()
 
@@ -21,8 +21,10 @@ for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
 
 app.config.globalProperties.$echarts = echarts;
 app
-  .use(ElementPlus)
+  .use(ElementPlus, {
+    locale: zhCn,
+  })
   .use(createPinia())
   .use(router)
   .use(pinia)
-  .mount('#app')
+  .mount("#app");

+ 2 - 2
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/header/header.vue

@@ -85,7 +85,7 @@ const updateVisibleItems = () => {
   temporaryIndex.splice(temporaryIndex.length -1, 1, lastIndex)
 
   visibleItems.value = temporaryIndex;
-  console.log(visibleItems.value)
+  //console.log(visibleItems.value)
 };
 
 const setCurrentRouter = (item: RouteRecordRaw) => {
@@ -103,7 +103,7 @@ const logout = () => {
 onMounted(() => {
   routerList.value = routers;
   activeRouter.value = routerList.value.find((item) => item.path === router.currentRoute.value.path);
-  console.log("routerList", routerList);
+  //console.log("routerList", routerList);
 
   window.addEventListener('resize', updateVisibleItems);
   setTimeout(() => {

+ 1 - 1
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/home copy.vue

@@ -72,7 +72,7 @@ const logout = () => {
 onMounted(() => {
   routerList.value = getRoutersList;
   activeRouter.value = routerList.value.find((item) => item.path === router.currentRoute.value.path);
-  console.log("routerList", routerList);
+  //console.log("routerList", routerList);
 })
 
 </script>

+ 3 - 3
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/login.vue

@@ -73,9 +73,9 @@ const login = (formEl: FormInstance | undefined) => {
       return false;
     }
     loginLoading.value = true;
-    console.log(ruleForm.value);
+    //console.log(ruleForm.value);
     post(LOGIN, { ...ruleForm.value }).then(res => {
-      console.log(res);
+      //console.log(res);
       if(res.code == 'error') {
         globalPopup?.showError(res.msg)
         loginLoading.value = false;
@@ -90,7 +90,7 @@ const login = (formEl: FormInstance | undefined) => {
       }, 1000)
       loginLoading.value = false;
     }).catch(err => {
-      console.log(err)
+      //console.log(err)
       loginLoading.value = false;
     })
     return

+ 1 - 0
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/tasks/api.ts

@@ -0,0 +1 @@
+export const MDO = "/tasks";

+ 63 - 36
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/tasks/index.vue

@@ -2,43 +2,46 @@
   <div class="h-full flex">
     <div class="p-5 w-80 pr-0">
       <div class="bg-white w-full h-full shadow-md rounded-md flex flex-col">
-        <div class="flex-1 p-3 overflow-y-scroll">
-          <ul>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-            <li>sssss</li>
-          </ul>
+        <div class="flex-1 p-3 overflow-y-auto">
+          <el-form :model="ruleForm">
+            <el-form-item label="任务名称:" label-width="7em" prop="taskName">
+              <el-input v-model="ruleForm.taskName" placeholder="请输入" />
+            </el-form-item>
+            <el-form-item label="客户名称:" label-width="7em" prop="customerName">
+              <el-input v-model="ruleForm.customerName" placeholder="请输入" />
+            </el-form-item>
+            <el-form-item label="联系人电话:" label-width="7em" prop="tel">
+              <el-input v-model="ruleForm.tel" placeholder="请输入" />
+            </el-form-item>
+            <el-form-item label="优先级" label-width="7em" prop="priority">
+              <el-select v-model="ruleForm.priority" placeholder="请选择">
+                <el-option label="全部" value="0" />
+                <el-option label="高" value="1" />
+                <el-option label="中" value="2" />
+                <el-option label="低" value="3" />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="任务状态" label-width="7em" prop="status">
+              <el-select v-model="ruleForm.status" placeholder="请选择">
+                <el-option label="全部" value="0" />
+                <el-option label="未开始" value="1" />
+                <el-option label="进行中" value="2" />
+                <el-option label="已完成" value="3" />
+                <el-option label="超时" value="4" />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="开始日期" label-width="7em" prop="startDate">
+              <el-date-picker v-model="ruleForm.startDate" type="date" placeholder="选择日期" value-format="YYYY-MM-DD" />
+            </el-form-item>
+            <el-form-item label="结束日期" label-width="7em" prop="endDate">
+              <el-date-picker v-model="ruleForm.endDate" type="date" placeholder="选择日期" value-format="YYYY-MM-DD" />
+            </el-form-item>
+
+          </el-form>
         </div>
         <div class="w-full flex p-3 shadow-[0_-3px_5px_0px_rgba(0,0,0,0.2)]">
-          <El-button class="w-full">重置</El-Button>
-          <El-button type="primary" class="w-full">搜索</El-Button>
+          <el-button size="large" class="w-full" @click="reset()">重置</el-Button>
+          <el-button type="primary" size="large" class="w-full" @click="search()">搜索</el-Button>
         </div>
       </div>
     </div>
@@ -49,7 +52,31 @@
 </template>
 
 <script lang="ts" setup>
-
+import { onBeforeMount, onMounted, ref } from 'vue';
+import { useStore } from '@/store';
+import { MDO } from './api';
+const { getFunctionList } = useStore()
+const config = ref<any>([])
+const defaultForm = {
+  taskName: '',
+  customerName: '',
+  tel: '',
+  priority: '0',
+  status: '0',
+  startDate: '',
+  endDate: '',
+}
+const ruleForm = ref<any>()
+const reset = () => {
+  ruleForm.value = defaultForm;
+}
+const search = () => {
+  console.log("ruleForm", ruleForm.value);
+}
+onBeforeMount(() => {
+  config.value = getFunctionList(MDO);
+  ruleForm.value = defaultForm;
+})
 </script>
 
 <style lang="scss" scoped></style>

+ 4 - 4
fhKeeper/formulahousekeeper/customerBuler-crm/src/router/index.ts

@@ -47,11 +47,11 @@ const router = createRouter({
 router.beforeEach((to, _from, next) => {
   const routerList = useStore().routers;
   const routers = router.getRoutes();
-  console.log(routerList, routers);
+  //console.log(routerList, routers);
   const { setAsyncRoutesMark, asyncRoutesMark, getToken } = useStore();
   const token = getToken;
   const skipPath = ["/login", "/register", "/test", "/testEcharts"];
-  console.log(token, '<==== token')
+  //console.log(token, '<==== token')
   if (skipPath.includes(to.path)) {
     next();
   } else {
@@ -90,10 +90,10 @@ router.beforeEach((to, _from, next) => {
         next({ ...to, replace: true });
       }
     } else {
-      console.log("无登录信息,跳转到登录页");
+      //console.log("无登录信息,跳转到登录页");
       next(`/login`);
     }
   }
-  console.log(routerList);
+  //console.log(routerList);
 });
 export default router;

+ 1 - 0
fhKeeper/formulahousekeeper/customerBuler-crm/src/vite-env.d.ts

@@ -5,3 +5,4 @@ declare module "*.vue" {
     export default vueComponent;
 }
 
+declare module "element-plus/dist/locale/zh-cn.mjs";

+ 33 - 9
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/ClueController.java

@@ -6,8 +6,10 @@ import com.management.platform.entity.Clue;
 import com.management.platform.entity.SysDict;
 import com.management.platform.entity.User;
 import com.management.platform.mapper.SysDictMapper;
+import com.management.platform.mapper.SysFunctionMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.ClueService;
+import com.management.platform.service.SysFunctionService;
 import com.management.platform.service.UserService;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,6 +20,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -37,17 +40,19 @@ public class ClueController {
     private ClueService clueService;
     @Resource
     private UserMapper userMapper;
+    @Resource
+    private SysFunctionService sysFunctionService;
 
     @Resource
     private SysDictMapper sysDictMapper;
 
 
-    @RequestMapping("getClueSources")
-    public Object getClueSources(){
-        QueryWrapper<SysDict> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("code", "ClueSources");
-        return sysDictMapper.selectList(queryWrapper);
-    }
+//    @RequestMapping("getClueSources")
+//    public Object getClueSources(){
+//        QueryWrapper<SysDict> queryWrapper = new QueryWrapper<>();
+//        queryWrapper.eq("code", "ClueSources");
+//        return sysDictMapper.selectList(queryWrapper);
+//    }
     @RequestMapping("getDetail")
     public Object getDetail(@RequestBody Clue clue){
         HttpRespMsg msg = new HttpRespMsg();
@@ -57,9 +62,21 @@ public class ClueController {
     @RequestMapping("listClue")
     public Object list(@RequestBody Clue clue, HttpServletRequest request){
         //TODO token待定
-        // User user = userMapper.selectById(request.getHeader(  "Token"));
-        // clue.setCompanyId(user.getCompanyId());
-        List<Clue> list =  clueService.getList(clue);
+        User user = userMapper.selectById(request.getHeader("Token"));
+        clue.setCompanyId(user.getCompanyId());
+        boolean isAll = sysFunctionService.hasPriviledge(user.getRoleId(), "查看全部线索");
+        boolean isNotAll = sysFunctionService.hasPriviledge(user.getRoleId(), "查看负责部门线索");
+        List<Clue> list = new ArrayList<>();
+        if (!isAll){
+            //查看全部线索
+            list = clueService.getList(clue);
+        }else if (!isNotAll){
+            //查看负责部门线索 找出所处部门下所有的负责人
+            list = clueService.getList1(clue,user);
+        }else {
+            // 查看负责人为 自己 和 null的数据
+            list = clueService.getList2(clue,user);
+        }
         HashMap<Object, Object> map = new HashMap<>();
         map.put("data",list);
         map.put("total",clueService.getTotal(clue));
@@ -125,6 +142,13 @@ public class ClueController {
         clueService.isRollback(ids);
         return msg;
     }
+    @RequestMapping("claim")
+    public Object claim(@RequestBody Clue clue, HttpServletRequest request){
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.setMsg("操作成功");
+        clueService.getAndTransfer(clue);
+        return msg;
+    }
     @RequestMapping("deleterDelete")
     public Object deleterDelete(@RequestBody List<Integer> ids){
         HttpRespMsg msg = new HttpRespMsg();

+ 4 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/ClueMapper.java

@@ -2,6 +2,7 @@ package com.management.platform.mapper;
 
 import com.management.platform.entity.Clue;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -16,8 +17,11 @@ import java.util.List;
 public interface ClueMapper extends BaseMapper<Clue> {
 
     List<Clue> list(Clue clue);
+    List<Clue> list1(@Param("clue") Clue clue ,@Param("userId") String userId);
     List<Clue> Deleterlist(Clue clue);
 
     Integer getTotal(Clue clue);
     Integer getDeleterTotal(Clue clue);
+
+    List<Clue> list2(Clue clue, String id);
 }

+ 5 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/ClueService.java

@@ -2,6 +2,7 @@ package com.management.platform.service;
 
 import com.management.platform.entity.Clue;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.entity.User;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
@@ -22,6 +23,8 @@ public interface ClueService extends IService<Clue> {
     void isDelete(List<Integer> ids);
 
     List<Clue> getList(Clue clue);
+    List<Clue> getList1(Clue clue, User user);
+    List<Clue> getList2(Clue clue, User user);
     List<Clue> getDeleterList(Clue clue);
 
     Integer getTotal(Clue clue);
@@ -32,4 +35,6 @@ public interface ClueService extends IService<Clue> {
     void isRollback(List<Integer> ids);
 
     void deleterDelete(List<Integer> ids);
+
+    void getAndTransfer(Clue clue);
 }

+ 31 - 8
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ClueServiceImpl.java

@@ -4,11 +4,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.management.platform.entity.Clue;
 import com.management.platform.entity.ClueLog;
+import com.management.platform.entity.User;
 import com.management.platform.mapper.ClueLogMapper;
 import com.management.platform.mapper.ClueMapper;
 import com.management.platform.service.ClueService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.service.SysFunctionService;
+import com.management.platform.service.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -20,7 +22,7 @@ import java.util.List;
 
 /**
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  *
  * @author Seyason
@@ -35,6 +37,8 @@ public class ClueServiceImpl extends ServiceImpl<ClueMapper, Clue> implements Cl
     private ClueMapper clueMapper;
     @Autowired
     private ClueLogMapper clueLogMapper;
+    @Autowired
+    private UserService userService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -65,22 +69,22 @@ public class ClueServiceImpl extends ServiceImpl<ClueMapper, Clue> implements Cl
     }
 
     private Clue setNull(Clue clue) {
-        if (clue.getPlate1() == ""){
+        if (clue.getPlate1() == "") {
             clue.setPlate1(null);
         }
-        if (clue.getPlate2() == ""){
+        if (clue.getPlate2() == "") {
             clue.setPlate2(null);
         }
-        if (clue.getPlate3() == ""){
+        if (clue.getPlate3() == "") {
             clue.setPlate3(null);
         }
-        if (clue.getPlate4() == ""){
+        if (clue.getPlate4() == "") {
             clue.setPlate4(null);
         }
-        if (clue.getPlate5() == ""){
+        if (clue.getPlate5() == "") {
             clue.setPlate5(null);
         }
-    return clue;
+        return clue;
     }
 
     @Override
@@ -98,6 +102,16 @@ public class ClueServiceImpl extends ServiceImpl<ClueMapper, Clue> implements Cl
         return clueMapper.list(clue);
     }
 
+    @Override
+    public List<Clue> getList1(Clue clue, User user) {
+        return clueMapper.list1(clue, user.getId());
+    }
+
+    @Override
+    public List<Clue> getList2(Clue clue, User user) {
+        return clueMapper.list2(clue, user.getId());
+    }
+
     @Override
     public List<Clue> getDeleterList(Clue clue) {
         return clueMapper.Deleterlist(clue);
@@ -107,6 +121,7 @@ public class ClueServiceImpl extends ServiceImpl<ClueMapper, Clue> implements Cl
     public Integer getTotal(Clue clue) {
         return clueMapper.getTotal(clue);
     }
+
     @Override
     public Integer getDeleterTotal(Clue clue) {
         return clueMapper.getDeleterTotal(clue);
@@ -116,7 +131,7 @@ public class ClueServiceImpl extends ServiceImpl<ClueMapper, Clue> implements Cl
     public Clue getInfo(Clue clue) {
         Clue clue1 = clueMapper.selectById(clue.getId());
         QueryWrapper<ClueLog> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("clue_id",clue.getId());
+        queryWrapper.eq("clue_id", clue.getId());
         List<ClueLog> logs = clueLogMapper.selectList(queryWrapper);
         clue1.setClueLogList(logs);
         return clue1;
@@ -138,5 +153,13 @@ public class ClueServiceImpl extends ServiceImpl<ClueMapper, Clue> implements Cl
         clueMapper.deleteBatchIds(ids);
     }
 
+    @Override
+    public void getAndTransfer(Clue clue) {
+        UpdateWrapper<Clue> updateWrapper = new UpdateWrapper<>();
+
+
+        clueMapper.update(clue, updateWrapper);
+    }
+
 
 }

+ 80 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/ClueMapper.xml

@@ -68,6 +68,86 @@
         </if>
         limit #{pageIndex},#{pageFrom}
     </select>
+    <select id="list1" resultType="com.management.platform.entity.Clue">
+        select c.id,
+        c.company_id,
+        (select company_name from company where company_id = c.id) companyName,
+        c.clue_name,
+        c.clue_source_id,
+        c.phone,
+        c.email,
+        c.customer_industry_id,
+        c.customer_level_id,
+        c.address,
+        c.incharger_id,
+        c.remark,
+        c.is_delete,
+        c.plate1,
+        c.plate2,
+        c.plate3,
+        c.plate4,
+        c.plate5,
+        c.create_time,
+        c.create_id
+        from Clue c
+        where
+        c.company_id = #{companyId} and is_delete = 0
+        and c.incharger_id in
+        (SELECT id from `user` WHERE department_id = (SELECT department_id from `user` WHERe id = c.id))
+        and c.incharger_id is null
+        <if test="startTime != null and endTime != null ">
+            and  c.create_time BETWEEN  #{startTime} and #{endTime}
+        </if>
+        <if test="clueName != null and clueName != '' ">
+            and  c.clue_name =  #{clueName}
+        </if>
+        <if test="clueSourceId != null">
+            and  c.clue_source_id =  #{clueSourceId}
+        </if>
+        <if test="customerIndustryId != null">
+            and  c.customer_industry_id =  #{customerIndustryId}
+        </if>
+        limit #{pageIndex},#{pageFrom}
+    </select>
+    <select id="list2" resultType="com.management.platform.entity.Clue">
+        select c.id,
+        c.company_id,
+        (select company_name from company where company_id = c.id) companyName,
+        c.clue_name,
+        c.clue_source_id,
+        c.phone,
+        c.email,
+        c.customer_industry_id,
+        c.customer_level_id,
+        c.address,
+        c.incharger_id,
+        c.remark,
+        c.is_delete,
+        c.plate1,
+        c.plate2,
+        c.plate3,
+        c.plate4,
+        c.plate5,
+        c.create_time,
+        c.create_id
+        from Clue c
+        where
+        c.company_id = #{companyId} and is_delete = 0
+        and c.incharger_id = #{userId} and c.incharger_id is null
+        <if test="startTime != null and endTime != null ">
+            and  c.create_time BETWEEN  #{startTime} and #{endTime}
+        </if>
+        <if test="clueName != null and clueName != '' ">
+            and  c.clue_name =  #{clueName}
+        </if>
+        <if test="clueSourceId != null">
+            and  c.clue_source_id =  #{clueSourceId}
+        </if>
+        <if test="customerIndustryId != null">
+            and  c.customer_industry_id =  #{customerIndustryId}
+        </if>
+        limit #{pageIndex},#{pageFrom}
+    </select>
     <select id="Deleterlist" resultType="com.management.platform.entity.Clue">
         select c.id,
                c.company_id,