Parcourir la source

Merge remote-tracking branch 'origin/master'

yusm il y a 7 mois
Parent
commit
1b3dc52af7

+ 0 - 0
fhKeeper/formulahousekeeper/customerBuler-crm/src/components/translationComponent/personnelSearch/data.ts


+ 124 - 16
fhKeeper/formulahousekeeper/customerBuler-crm/src/components/translationComponent/personnelSearch/personnelSearch.vue

@@ -1,5 +1,6 @@
 <script lang="ts" setup>
 import { ref, reactive, onMounted, inject, watchEffect, computed } from 'vue';
+import { debounce } from 'lodash';
 import { storeToRefs } from 'pinia';
 import { Emits, optionsType } from './type';
 import { useStore } from '@/store/index'
@@ -10,46 +11,153 @@ const props = defineProps({
   modelValue: { type: [String, Number, Array, Object, Boolean], required: true },
   multiple: { type: Boolean, required: false, default: false },
   size: { type: String as () => assemblySize, required: true, default: () => 'small' },
-  placeholder: { type: String, required: false, default: () => '请填写' },
+  placeholder: { type: String, required: false, default: () => '请选择' },
   disabled: { type: Boolean, required: false, default: false },
   options: { type: Array as () => optionsType, required: false, default: () => [] },
+  width: { type: String, required: false, default: () => '100%' },
 });
 const emit = defineEmits<Emits>();
-const { userInfo } = storeToRefs(useStore());
+const personnelArray = ref<optionsType>([]);
+const { userInfo, personnelList } = storeToRefs(useStore());
+const { setValue } = useStore()
 
 const timeRef = generateUniqueId()
+const selectLoading = ref(false);
 const controlTranslation = reactive({
-  visibleFlag: false
+  visibleFlag: false // 下拉框出现隐藏
 })
 
 const selectedValue = ref(props.modelValue); // 响应式绑定 v-model 的值
 
-// function getUserList(keyword: string = '', flag: boolean = true) {
-//   post(`/user/getEmployeeList`, {
-//     keyword,
-//     status: 3,
-//     matchingType: 0,
-//   })
-// }
+const getSelectedLabel = computed(() => {
+  if (!props.multiple) {
+    const item = getPersonnelListItems(selectedValue.value);
+    return item ? item.label : props.placeholder
+  }
+
+  if(props.multiple) {
+    if(Array.isArray(selectedValue.value)) {
+      if(selectedValue.value.length <= 0) {
+        return props.placeholder
+      }
+      const item = getPersonnelListItems(selectedValue.value);
+      return item ? item.label : props.placeholder
+    } else {
+      return props.placeholder
+    }
+  }
+
+  return props.placeholder
+})
+
+function tagClose(_evt: MouseEvent) {
+  if(Array.isArray(selectedValue.value)) {
+    selectedValue.value.shift()
+    updateValue(selectedValue.value)
+  }
+}
+function getPersonnelListItems(val: any) {
+  let value = val;
+  if (Array.isArray(val) && val.length > 0) {
+    value = val[0]
+  }
+  return personnelList.value.find((item: any) => item.value == value)
+}
+
+function getUserList(keyword: string = '') {
+  post(`/user/getSimpleActiveUserListNew`, { keyword }).then(res => {
+    personnelArray.value = res.data
+    if (!keyword) {
+      setValue((res.data || []), 'personnelList')
+    }
+  }).finally(() => {
+    selectLoading.value = false
+  })
+}
 
 function visibleChange(visible: boolean) { // 下拉框出现/隐藏时触发
-  console.log(visible, '<==== visible')
   controlTranslation.visibleFlag = visible
 }
+
+const filterMethod = debounce(filterMethods, 500)
+function filterMethods(val: string) {
+  if (val == '') {
+    personnelArray.value = personnelList.value
+    selectLoading.value = false
+    return
+  }
+  getUserList(val)
+}
+
 function updateValue(val: any) { // 值改变的时候触发
   emit('update:modelValue', selectedValue.value)
   emit('change', val)
 }
 
-console.log(props, userInfo, '<==== 看看数据')
+onMounted(() => {
+  if (personnelList.value.length == 0) {
+    getUserList()
+  } else {
+    personnelArray.value = personnelList.value
+  }
+})
+
+console.log(props, userInfo.value, '<==== 看看数据')
 </script>
 
 <template>
   <el-select v-model="selectedValue" :ref="`selectRef${timeRef}`" :multiple="multiple" :size="size"
-    :placeholder="placeholder" :disabled="disabled" clearable collapse-tags @change="updateValue"
-    @visible-change="visibleChange">
-    <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
+    :loading="selectLoading" :placeholder="placeholder" :disabled="disabled" clearable filterable collapse-tags
+    :style="`width: ${width}`"
+    :class="`custom-select ${userInfo.userNameNeedTranslate != 1 && !controlTranslation.visibleFlag ? 'setUpInput' : ''}`"
+    @change="updateValue" @visible-change="visibleChange"
+    :filter-method="(val: string) => { selectLoading = true, filterMethod(val) }">
+    <!-- 搜索内容显示 -->
+    <template #prefix v-if="!multiple">
+      <div style="height: 100%;display: flex;align-items: center;">
+        <!-- 单选 -->
+        <div v-if="!controlTranslation.visibleFlag" class="selectSingleChoice">
+          <template v-if="getSelectedLabel == placeholder">
+            {{ placeholder }}
+          </template>
+          <template v-else>
+            <span style="color: #303133;">
+              <TextTranslation translationTypes="userName" :translationValue="getSelectedLabel"></TextTranslation>
+            </span>
+          </template>
+        </div>
+      </div>
+    </template>
+    <template #tag v-if="multiple">
+      <!-- 多选 -->
+      <template v-if="Array.isArray(selectedValue) && selectedValue.length > 0">
+        <el-tag type="info" :size="size" closable @close="tagClose">
+          <TextTranslation translationTypes="userName" :translationValue="getSelectedLabel"></TextTranslation>
+        </el-tag>
+        <el-tag type="info" :size="size" v-if="selectedValue.length > 1">+{{ selectedValue.length }}</el-tag>
+      </template>
+      <template v-else>
+        <span style="color: #A8ABB2">{{ placeholder }}</span> 
+      </template>
+    </template>
+    <!-- 主题内容显示 -->
+    <el-option v-for="item in personnelArray" :key="item.value" :label="item.label" :value="item.value"></el-option>
   </el-select>
 </template>
 
-<style lang="scss" scoped></style>
+<style lang="scss" scoped>
+.custom-select {
+  :deep(.el-select__placeholder.is-transparent) {
+    color: transparent !important;
+  }
+  :deep(.el-select__placeholder) {
+    span {
+      display: none;
+    }
+  }
+}
+
+.setUpInput :deep(.el-input__inner) {
+  color: #fff !important;
+}
+</style>

+ 10 - 4
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/analysis/index.vue

@@ -17,10 +17,15 @@ import {
   SummaryData
 } from './api';
 
-const selectVal = ref<string | number>('')
+const selectVal = ref<Array<string | number>>([])
+const selectVals = ref<string | number>('')
 const selectChange = (val: any) => {
-  console.log(val, '<===== 当前的数据')
-  console.log(selectVal.value, '<===== 双向绑定的数据')
+  console.log(val, '<===== 当前的数据 selectVal')
+  console.log(selectVal.value, '<===== 双向绑定的数据 selectVal')
+}
+const selectChange2 = (val: any) => {
+  console.log(val, '<===== 当前的数据 selectVals')
+  console.log(selectVals.value, '<===== 双向绑定的数据 selectVals')
 }
 const permissionOptions = [
   {
@@ -187,7 +192,8 @@ watchEffect(() => {
           </el-select>
         </div>
         <div class="w-40">
-          <personnel-search v-model="selectVal" disabled multiple placeholder="你好世界" @change="selectChange"></personnel-search>
+          <personnel-search v-model="selectVal" :size="'small'" multiple placeholder="你好世界" @change="selectChange"></personnel-search>
+          <personnel-search v-model="selectVals" :size="'small'" placeholder="你好世界" @change="selectChange2"></personnel-search>
           <el-select
             ref="select1"
             size="small"

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

@@ -82,7 +82,9 @@ const agentConfig = () => {
 onMounted(async () => {
   await nextTick();
   isLoading.value = false;
-  agentConfig()
+  if (userInfo.value.userNameNeedTranslate == 1) {
+    agentConfig()
+  }
 });
 </script>
 

+ 1 - 0
fhKeeper/formulahousekeeper/customerBuler-crm/src/store/Store.d.ts

@@ -2,6 +2,7 @@ type SotreState = {
   userInfo: any;
   routers: RouteRecordRaw[];
   asyncRoutesMark: boolean;
+  personnelList: any[]
 };
 type SoreGetters = {
   getRoutersList: () => RouteRecordRaw[];

+ 2 - 0
fhKeeper/formulahousekeeper/customerBuler-crm/src/store/index.ts

@@ -10,6 +10,7 @@ export const useStore = defineStore<
     userInfo: {}, // 当前的用户信息
     routers: [], // 返回的所有路由
     asyncRoutesMark: false, // 是否添加过路由
+    personnelList: [], // 人员列表
   }),
   getters: {
     getRoutersList() {
@@ -48,6 +49,7 @@ export const useStore = defineStore<
       sessionStorage.clear();
       this.userInfo = {};
       this.routers = [];
+      this.personnelList = [];
       this.asyncRoutesMark = false;
     },
   },

+ 23 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -441,13 +441,29 @@ public class ReportController {
 
 
         //添加财务审核该月后无法再次填报该月日报
-        if(null != createDate && 1== createDate.length){
-            String reportYM = createDate[0].substring(0,7);
-            Integer count = financialAuditMapper.checkFinanceReview(user.getCompanyId(),reportYM);
-            if(0 < count){
-                HttpRespMsg msg = new HttpRespMsg();
-                msg.setError(MessageUtils.message("report.financial_report",reportYM));
-                return msg;
+        if(null != createDate && 0 < createDate.length){
+            String createDateOne = createDate[0];
+            if (createDateOne.contains("@")) {
+                //批量填报的日期
+                String[] dateArray = createDateOne.split("@");
+                for (String date : dateArray) {
+                    String reportYM = date.substring(0,7);
+                    Integer count = financialAuditMapper.checkFinanceReview(user.getCompanyId(),reportYM);
+                    if(0 < count){
+                        HttpRespMsg msg = new HttpRespMsg();
+                        msg.setError(MessageUtils.message("report.financial_report",reportYM));
+                        return msg;
+                    }
+                }
+            } else {
+                //单个日期
+                String reportYM = createDateOne.substring(0,7);
+                Integer count = financialAuditMapper.checkFinanceReview(user.getCompanyId(),reportYM);
+                if(0 < count){
+                    HttpRespMsg msg = new HttpRespMsg();
+                    msg.setError(MessageUtils.message("report.financial_report",reportYM));
+                    return msg;
+                }
             }
         }
 

+ 2 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java

@@ -505,6 +505,7 @@ public class DingDingServiceImpl implements DingDingService {
             //新开通的情况,给字段默认值
             dingding.setSyncContact(1);
 //            dingding.setContactNeedTranslate(1);//上架到钉钉应用市场,采用数据安全中心的方式,不需要转译了。
+            dingding.setContactNeedTranslate(0);
             //第一次,查询对方企业的accessToken
             SysConfig config = sysConfigMapper.selectOne(new QueryWrapper<SysConfig>().eq("param_key", "dingding_suite_ticket"));
             String suiteTicket = config.getParamValue();
@@ -1579,15 +1580,12 @@ public class DingDingServiceImpl implements DingDingService {
                 departmentDingding.setCorpid(corpid);
                 departmentDingding.setDdDeptid(dept.getInteger("dept_id"));
                 //TODO:对于钉钉市场的用户,需要通讯录加密的,没有返回部门名称,用部门id替代
-                if (companyDingding.getContactNeedTranslate() == 1) {
+                if (companyDingding.getContactNeedTranslate() != null && companyDingding.getContactNeedTranslate() == 1) {
                     departmentDingding.setName(dept.getString("dept_id"));
                 } else {
                     departmentDingding.setName(dept.getString("name"));
                 }
                 departmentDingding.setDdParentid(dept.getInteger("parent_id"));
-                if (departmentDingding.getDdDeptid() == 661842181) {
-                    System.out.println("=========zfind 661842181"+departmentDingding.getName());
-                }
                 synchronized (deptLock) {
                     List<DepartmentDingding> departmentDingdings = departmentDingdingMapper.selectList(new QueryWrapper<DepartmentDingding>()
                             .eq("corpid", corpid)

+ 4 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -9877,11 +9877,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         for (User item : needRangeUserList) {
             for (LocalDate day : days) {
                 boolean workDay = WorkDayCalculateUtils.isWorkDay(day);
-                //去掉非工作日
+                boolean match = list.stream().anyMatch(l -> l.get("createDate").equals(df.format(day)) && l.get("userId").equals(item.getId()));
+                //去掉非工作日且无日报
                 if(!workDay){
                     continue;
                 }
-                boolean match = list.stream().anyMatch(l -> l.get("createDate").equals(df.format(day)) && l.get("userId").equals(item.getId()));
                 if(!match){
                     Map<String,Object> map=new HashMap<>();
                     map.put("userId",item.getId());
@@ -9943,12 +9943,12 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     Method method = aClass.getMethod(getter);
                     String invoke = (String) method.invoke(targetUser);
                     if(invoke==null||invoke.equals("有加班费")){
-                        if((!(Double.valueOf(String.valueOf(map.get("workingTime"))).equals(Double.valueOf(String.valueOf(map.get("cardTime"))))))&&(map.containsKey("cancelNormal")&&(Integer)map.get("cancelNormal")!=1)){
+                        if((!(Double.valueOf(String.valueOf(map.get("workingTime"))).equals(Double.valueOf(String.valueOf(map.get("cardTime"))))))&&(map.containsKey("cancelNormal")&&(Integer.valueOf(String.valueOf(map.get("cancelNormal"))))!=1)){
                             map.put("exceedCardTime",1);
                         }
                         map.put("invokeValue","有加班费");
                     }else{
-                        if(((Double.valueOf(String.valueOf(map.get("workingTime")))<Double.valueOf(String.valueOf(map.get("cardTime")))))&&(map.containsKey("cancelNormal")&&(Integer)map.get("cancelNormal")!=1)){
+                        if(((Double.valueOf(String.valueOf(map.get("workingTime")))<Double.valueOf(String.valueOf(map.get("cardTime")))))&&(map.containsKey("cancelNormal")&&(Integer.valueOf(String.valueOf(map.get("cancelNormal"))))!=1)){
                             map.put("exceedCardTime",1);
                         }
                         map.put("invokeValue","无加班费");

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml

@@ -1380,7 +1380,7 @@
 
     <select id="getUserDailyWorkTimeReminder" resultType="java.util.Map">
         SELECT date_format(r.create_date,'%Y-%m-%d') AS createDate,u.name AS name,u.id as userId,u.corpwx_userid as corpwxUserId,d.corpwx_deptid as corpwxDeptId,d.department_name AS departmentName,
-        IFNULL(SUM(r.working_time),0) AS  workingTime,IFNULL(ufv.work_hours,0) AS cardTime,ufv.cancel_normal as cancelNormal
+        IFNULL(SUM(r.working_time),0) AS  workingTime,IFNULL(ufv.work_hours,0) AS cardTime,IFNULL(ufv.cancel_normal, 0) as cancelNormal
         FROM report  r
         LEFT JOIN user u ON r.creator_id=u.id
         LEFT JOIN department d ON d.department_id=u.department_id