刘洋 8 kuukautta sitten
vanhempi
commit
1982d89777

+ 1 - 1
src/api/report.js

@@ -314,7 +314,7 @@ export const processBySupplier = (params) =>
   });
 export const processByCoordinator = (params) =>
   request({
-    url: '/api/admin/crm/process/monitor/region',
+    url: '/api/admin/crm/process/monitor/coordinator',
     params,
   });
 

+ 2 - 2
src/components/global/report-header/index.vue

@@ -24,7 +24,7 @@
         <template #icon><SwapLeftIcon /></template>
         返回
       </t-button>
-      <t-button
+      <!-- <t-button
         v-else
         variant="outline"
         class="m-l-16px"
@@ -32,7 +32,7 @@
       >
         <template #icon><Fullscreen2Icon /></template>
         全屏
-      </t-button>
+      </t-button> -->
     </div>
   </div>
 </template>

+ 4 - 2
src/components/global/search-form/index.vue

@@ -3,6 +3,7 @@
     v-if="filterFields?.length"
     class="table-search"
     :class="{ 'in-padding': inPadding, 'no-border': noBorder }"
+    ref="qmLowFormRef"
   >
     <t-form ref="formRef" :data="params" :inline="true" :rules="rules">
       <div class="first-row flex">
@@ -89,6 +90,8 @@ import { ChevronDownIcon, ChevronUpIcon } from 'tdesign-icons-vue-next';
 import SearchFormItem from './components/search-form-item.vue';
 import elementResizeDetectorMaker from 'element-resize-detector';
 import { cloneDeep } from 'lodash-es';
+
+const qmLowFormRef = ref();
 const otherRows = ref(null);
 let comWidth = ref(0);
 const { proxy } = getCurrentInstance();
@@ -98,7 +101,7 @@ const listen = () => {
 onMounted(() => {
   window.addEventListener('resize', listen);
   var erd = elementResizeDetectorMaker();
-  let ele = document.querySelector('.left-menu');
+  let ele = qmLowFormRef.value;
   if (!ele) return false;
   erd.listenTo(ele, function (element) {
     listen();
@@ -252,7 +255,6 @@ const colToWidth = (colSpan) => {
   if (colSpan === 0) {
     return 'auto';
   }
-  // let canUseWidth = comWidth.value - (props.showAll ? 20 : 60);
   let canUseWidth = comWidth.value - (props.showAll ? 40 : 60);
   return Math.floor((canUseWidth * colSpan) / 24) + 'px';
 };

+ 2 - 2
src/layout/index.vue

@@ -22,7 +22,7 @@
           <p>{{ item.meta.title }}</p>
         </div>
       </div>
-      <div class="app-menu-footer"></div>
+      <!-- <div class="app-menu-footer"></div> -->
     </t-aside>
     <t-aside v-if="appStore.showSubmenu" class="app-submenu" width="186px">
       <left-menu class="app-submenu-body"></left-menu>
@@ -157,7 +157,7 @@ watch(
     flex-shrink: 0;
 
     &-list {
-      padding: 16px 8px 40px;
+      padding: 16px 8px 16px;
     }
     &-logo {
       height: 52px;

+ 9 - 0
src/style/global.less

@@ -753,3 +753,12 @@ body {
     }
   }
 }
+
+.link {
+  text-align: center;
+  cursor: pointer;
+  color: var(--td-brand-color);
+  &:hover {
+    text-decoration: underline;
+  }
+}

+ 1 - 2
src/views/project-quality/project-quality-manage/issues-feedback/index.vue

@@ -14,7 +14,7 @@
       <template #service="{ item, params }">
         <select-service-unit
           v-model="params[item.prop]"
-          :filterParams="{ statusList: ['PUBLISH', 'FINISH'] }"
+          :filterParams="{ statusList: ['PUBLISH'] }"
         ></select-service-unit>
       </template>
       <template #user="{ item, params }">
@@ -102,7 +102,6 @@
       v-model:visible="showSopStepDialog"
       :sop="curSopData2"
       :type="curSopType"
-      @confirm="fetchData"
     ></sop-step-dialog>
   </div>
 </template>

+ 4 - 4
src/views/report/flowcheck-analysis/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="flow-check-analysis">
-    <report-header title="服务单元分析" hideTimePicker>
+    <report-header title="流程检查统计" hideTimePicker>
       <select-service-unit
         v-model="serviceId"
         clearable
@@ -11,7 +11,7 @@
     <div class="page-main">
       <div class="scroll-content">
         <div class="col1">
-          <div class="module-title">按大区步骤查阅统计</div>
+          <div class="module-title">按大区流程检查统计</div>
           <t-table
             size="small"
             row-key="leadId"
@@ -35,7 +35,7 @@
           </t-table>
         </div>
         <div class="col2">
-          <div class="module-title">按区域协调人步骤查阅统计</div>
+          <div class="module-title">按区域协调人流程检查统计</div>
           <t-table
             size="small"
             row-key="leadId"
@@ -54,7 +54,7 @@
               {{ row.readMsg }}({{ row.readRate + '%' }})
             </template>
             <template #unReadMsg="{ col, row }">
-              {{ row.readMsg }}({{ row.unReadRate + '%' }})
+              {{ row.unReadMsg }}({{ row.unReadRate + '%' }})
             </template>
           </t-table>
         </div>

+ 5 - 1
src/views/report/project-analysis/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="project-analysis">
-    <report-header title="服务单元分析" hideTimePicker>
+    <report-header title="项目进度监控" hideTimePicker>
       <select-service-unit
         v-model="serviceId"
         clearable
@@ -279,6 +279,7 @@
       v-model="showDetailDrawer"
       :process="curProcess"
       ref="DetailDrawerRef"
+      :sId="serviceId"
     />
   </div>
 </template>
@@ -361,6 +362,9 @@ const columns3 = [
 
 <style lang="less" scoped>
 .project-analysis {
+  :deep(.t-drawer__close-btn) {
+    z-index: 1;
+  }
   .page-main {
     height: calc(100vh - 57px);
     padding: 15px;

+ 14 - 8
src/views/report/quality-analysis/detail-drawer.vue

@@ -2,7 +2,7 @@
   <t-drawer
     v-model:visible="visible"
     :header="false"
-    size="80%"
+    size="90%"
     :close-btn="true"
     :cancelBtn="null"
     confirmBtn="关闭"
@@ -99,6 +99,7 @@ import QualityIssueDialog from '@/views/sop/sop-manage/quality-issue/quality-iss
 const emit = defineEmits(['update:modelValue']);
 const props = defineProps({
   modelValue: { type: Boolean, default: false },
+  sId: { type: String, default: '' },
 });
 const curSopType = ref('');
 const curSopData = ref({});
@@ -132,19 +133,24 @@ const columns = computed(() => {
 });
 const visible = useVModel(props, 'modelValue', emit);
 const params = reactive({
-  serviceId: '',
+  serviceId: props.sId || '',
   customName: '',
   influenceDegree: '',
   reason: '',
   areaManagerId: '',
 });
-
+watch(
+  () => props.sId,
+  (sId) => {
+    params.serviceId = sId;
+  }
+);
 const fields = ref([
   {
     prop: 'customName',
     label: '客户名称',
     labelWidth: 80,
-    colSpan: 4.5,
+    colSpan: 5,
   },
 
   {
@@ -152,7 +158,7 @@ const fields = ref([
     label: '影响度',
     type: 'select',
     labelWidth: 80,
-    colSpan: 4.5,
+    colSpan: 5,
     options: ISSUES_INFLUENCE_DEGREE.map((item) => {
       return {
         label: item,
@@ -168,7 +174,7 @@ const fields = ref([
     label: '问题归因',
     type: 'select',
     labelWidth: 100,
-    colSpan: 4.5,
+    colSpan: 5,
     options: dictToOptionList(ISSUES_REASON_TYPE),
     attrs: {
       clearable: true,
@@ -178,12 +184,12 @@ const fields = ref([
     prop: 'areaManagerId',
     label: '大区经理',
     labelWidth: 80,
-    colSpan: 4.5,
+    colSpan: 5,
     cell: 'areaManagerId',
   },
   {
     type: 'buttons',
-    colSpan: 6,
+    colSpan: 4,
     children: [
       {
         type: 'button',

+ 16 - 9
src/views/report/quality-analysis/index.vue

@@ -49,7 +49,7 @@
                   })
                 "
                 >{{ row.influenceDegreeA }}({{
-                  row.influenceDegreeARate
+                  row.influenceDegreeARate + '%'
                 }})</t-link
               >
             </template>
@@ -64,7 +64,7 @@
                   })
                 "
                 >{{ row.influenceDegreeB }}({{
-                  row.influenceDegreeBRate
+                  row.influenceDegreeBRate + '%'
                 }})</t-link
               >
             </template>
@@ -79,7 +79,7 @@
                   })
                 "
                 >{{ row.influenceDegreeC }}({{
-                  row.influenceDegreeCRate
+                  row.influenceDegreeCRate + '%'
                 }})</t-link
               >
             </template>
@@ -94,7 +94,7 @@
                   })
                 "
                 >{{ row.influenceDegreeD }}({{
-                  row.influenceDegreeDRate
+                  row.influenceDegreeDRate + '%'
                 }})</t-link
               >
             </template>
@@ -137,7 +137,7 @@
                   })
                 "
                 >{{ row.influenceDegreeA }}({{
-                  row.influenceDegreeARate
+                  row.influenceDegreeARate + '%'
                 }})</t-link
               >
             </template>
@@ -152,7 +152,7 @@
                   })
                 "
                 >{{ row.influenceDegreeB }}({{
-                  row.influenceDegreeBRate
+                  row.influenceDegreeBRate + '%'
                 }})</t-link
               >
             </template>
@@ -167,7 +167,7 @@
                   })
                 "
                 >{{ row.influenceDegreeC }}({{
-                  row.influenceDegreeCRate
+                  row.influenceDegreeCRate + '%'
                 }})</t-link
               >
             </template>
@@ -182,7 +182,7 @@
                   })
                 "
                 >{{ row.influenceDegreeD }}({{
-                  row.influenceDegreeDRate
+                  row.influenceDegreeDRate + '%'
                 }})</t-link
               >
             </template>
@@ -214,7 +214,11 @@
         </div>
       </div>
     </div>
-    <DetailDrawer v-model="showDetailDrawer" ref="DetailDrawerRef" />
+    <DetailDrawer
+      v-model="showDetailDrawer"
+      ref="DetailDrawerRef"
+      :sId="serviceId"
+    />
   </div>
 </template>
 
@@ -332,6 +336,9 @@ const toDetail = (row) => {
 
 <style lang="less" scoped>
 .quality-analysis {
+  :deep(.t-drawer__close-btn) {
+    z-index: 1;
+  }
   .page-main {
     height: calc(100vh - 57px);
     padding: 15px;

+ 6 - 5
src/views/report/resource-analysis/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="resource-analysis">
-    <report-header title="服务单元分析" hideTimePicker>
+    <report-header title="资源保障分析" hideTimePicker>
       <select-service-unit
         v-model="serviceId"
         clearable
@@ -92,9 +92,9 @@ const options2 = computed(() => {
     center: ['30%', '50%'],
   });
 });
-const barDataHandle = (data) => {
+const barDataHandle = (data, key) => {
   return {
-    xData: data?.map((item) => item.areaManagerName) || [],
+    xData: data?.map((item) => item[key]) || [],
     seriesData: [
       {
         name: '大区考勤异常数统计',
@@ -104,10 +104,10 @@ const barDataHandle = (data) => {
   };
 };
 const options3 = computed(() => {
-  return createBarOption(barDataHandle(data3.value));
+  return createBarOption(barDataHandle(data3.value, 'areaManagerName'));
 });
 const options4 = computed(() => {
-  return createBarOption(barDataHandle(data4.value));
+  return createBarOption(barDataHandle(data4.value, 'humanSupplierName'));
 });
 
 const serviceId = ref('');
@@ -123,6 +123,7 @@ watch(serviceId, (serviceId) => {
   });
   humanDingException({ serviceId }).then((res) => {
     data4.value = res || [];
+    console.log('data4', data4.value);
   });
 });
 </script>

+ 18 - 9
src/views/report/service-analysis/detail-drawer.vue

@@ -2,7 +2,7 @@
   <t-drawer
     v-model:visible="visible"
     :header="false"
-    size="80%"
+    size="90%"
     :close-btn="true"
     :cancelBtn="null"
     confirmBtn="关闭"
@@ -57,7 +57,9 @@
           <template #engineerList="{ row, col }">
             {{ row[col.colKey]?.map((item) => item.userName).join('、') }}
           </template>
-
+          <template #process="{ row, col }">
+            {{ PROJECT_PROCESS[row.process] }}
+          </template>
           <template #operate="{ row }">
             <div class="table-operations" @click.stop>
               <t-link
@@ -122,6 +124,7 @@ const props = defineProps({
   supplierId: { type: String, default: '' },
   coordinatorId: { type: String, default: '' },
   type: { type: String, default: '' },
+  sId: { type: String, default: '' },
 });
 const curSopType = ref('');
 const curSopData = ref({});
@@ -141,7 +144,7 @@ const columns = computed(() => {
     { colKey: 'crmName', title: '项目名称' },
     props.type === 'warn'
       ? { colKey: 'fieldObj', title: '预警字段' }
-      : { colKey: 'courseName', title: '"科目名称' },
+      : { colKey: 'courseName', title: '科目名称' },
     { colKey: 'process', title: '当前进度' },
     { colKey: 'leadName', title: '大区经理' },
     {
@@ -161,7 +164,7 @@ const columns = computed(() => {
 });
 const visible = useVModel(props, 'modelValue', emit);
 const params = reactive({
-  serviceUnitId: '',
+  serviceUnitId: props.sId || '',
   crmUserId: '',
   customName: '',
   leadId: '',
@@ -171,6 +174,12 @@ const params = reactive({
   type: '',
   fieldObj: '',
 });
+watch(
+  () => props.sId,
+  (sId) => {
+    params.serviceUnitId = sId;
+  }
+);
 if (props.type === 'warn') {
   params.type = props.type;
 }
@@ -179,20 +188,20 @@ const fields = ref([
     prop: 'crmUserId',
     label: '客户经理',
     labelWidth: 80,
-    colSpan: 4.5,
+    colSpan: 5,
     cell: 'crmUserId',
   },
   {
     prop: 'customName',
     label: '客户名称',
     labelWidth: 80,
-    colSpan: 4.5,
+    colSpan: 5,
   },
   {
     prop: 'process',
     label: '当前进度',
     labelWidth: 80,
-    colSpan: 4.5,
+    colSpan: 5,
     type: 'select',
     options: dictToOptionList(PROJECT_PROCESS),
     attrs: {
@@ -203,12 +212,12 @@ const fields = ref([
     prop: 'leadId',
     label: '大区经理',
     labelWidth: 80,
-    colSpan: 4.5,
+    colSpan: 5,
     cell: 'leadId',
   },
   {
     type: 'buttons',
-    colSpan: 6,
+    colSpan: 4,
     children: [
       {
         type: 'button',

+ 8 - 1
src/views/report/service-analysis/index.vue

@@ -62,7 +62,11 @@
       </div>
     </div>
 
-    <DetailDrawer v-model="showDetailDrawer" ref="DetailDrawerRef" />
+    <DetailDrawer
+      v-model="showDetailDrawer"
+      ref="DetailDrawerRef"
+      :sId="serviceId"
+    />
   </div>
 </template>
 
@@ -127,6 +131,9 @@ const toDetail = (item) => {
 
 <style lang="less" scoped>
 .service-analysis {
+  :deep(.t-drawer__close-btn) {
+    z-index: 1;
+  }
   .page-main {
     height: calc(100vh - 57px);
     padding: 15px;

+ 39 - 2
src/views/report/sop-analysis/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="sop-analysis">
-    <report-header title="服务单元分析" hideTimePicker>
+    <report-header title="SOP预警监控" hideTimePicker>
       <select-service-unit
         v-model="serviceId"
         clearable
@@ -32,6 +32,8 @@
                   searchByX({
                     leadId: row.leadId,
                     fieldObj: '',
+                    supplierId: '',
+                    coordinatorId: '',
                   })
                 "
                 >{{ row.total }}</t-link
@@ -44,6 +46,8 @@
                   searchByX({
                     fieldObj: 'scan_start_time',
                     leadId: row.leadId,
+                    supplierId: '',
+                    coordinatorId: '',
                   })
                 "
                 >{{ row.scanStartTimeNum }}({{
@@ -58,6 +62,8 @@
                   searchByX({
                     fieldObj: 'scan_end_time',
                     leadId: row.leadId,
+                    supplierId: '',
+                    coordinatorId: '',
                   })
                 "
                 >{{ row.scanEndTimeNum }}({{ row.scanEndTimeRatio }})</t-link
@@ -70,6 +76,8 @@
                   searchByX({
                     fieldObj: 'mark_start_time',
                     leadId: row.leadId,
+                    supplierId: '',
+                    coordinatorId: '',
                   })
                 "
                 >{{ row.markStartTimeNum }}({{
@@ -84,6 +92,8 @@
                   searchByX({
                     fieldObj: 'mark_end_time',
                     leadId: row.leadId,
+                    supplierId: '',
+                    coordinatorId: '',
                   })
                 "
                 >{{ row.markEndTimeNum }}({{ row.markEndTimeRatio }})</t-link
@@ -111,6 +121,8 @@
                   searchByX({
                     supplierId: row.supplierId,
                     fieldObj: '',
+                    leadId: '',
+                    coordinatorId: '',
                   })
                 "
                 >{{ row.total }}</t-link
@@ -123,6 +135,8 @@
                   searchByX({
                     fieldObj: 'scan_start_time',
                     supplierId: row.supplierId,
+                    leadId: '',
+                    coordinatorId: '',
                   })
                 "
                 >{{ row.scanStartTimeNum }}({{
@@ -137,6 +151,8 @@
                   searchByX({
                     fieldObj: 'scan_end_time',
                     supplierId: row.supplierId,
+                    leadId: '',
+                    coordinatorId: '',
                   })
                 "
                 >{{ row.scanEndTimeNum }}({{ row.scanEndTimeRatio }})</t-link
@@ -149,6 +165,8 @@
                   searchByX({
                     fieldObj: 'mark_start_time',
                     supplierId: row.supplierId,
+                    leadId: '',
+                    coordinatorId: '',
                   })
                 "
                 >{{ row.markStartTimeNum }}({{
@@ -163,6 +181,8 @@
                   searchByX({
                     fieldObj: 'mark_end_time',
                     supplierId: row.supplierId,
+                    leadId: '',
+                    coordinatorId: '',
                   })
                 "
                 >{{ row.markEndTimeNum }}({{ row.markEndTimeRatio }})</t-link
@@ -190,7 +210,12 @@
               <t-link
                 theme="primary"
                 @click="
-                  searchByX({ coordinatorId: row.coordinatorId, fieldObj: '' })
+                  searchByX({
+                    coordinatorId: row.coordinatorId,
+                    fieldObj: '',
+                    supplierId: '',
+                    leadId: '',
+                  })
                 "
                 >{{ row.total }}</t-link
               >
@@ -202,6 +227,8 @@
                   searchByX({
                     fieldObj: 'scan_start_time',
                     coordinatorId: row.coordinatorId,
+                    supplierId: '',
+                    leadId: '',
                   })
                 "
                 >{{ row.scanStartTimeNum }}({{
@@ -216,6 +243,8 @@
                   searchByX({
                     fieldObj: 'scan_end_time',
                     coordinatorId: row.coordinatorId,
+                    supplierId: '',
+                    leadId: '',
                   })
                 "
                 >{{ row.scanEndTimeNum }}({{ row.scanEndTimeRatio }})</t-link
@@ -228,6 +257,8 @@
                   searchByX({
                     fieldObj: 'mark_start_time',
                     coordinatorId: row.coordinatorId,
+                    supplierId: '',
+                    leadId: '',
                   })
                 "
                 >{{ row.markStartTimeNum }}({{
@@ -242,6 +273,8 @@
                   searchByX({
                     fieldObj: 'mark_end_time',
                     coordinatorId: row.coordinatorId,
+                    supplierId: '',
+                    leadId: '',
                   })
                 "
                 >{{ row.markEndTimeNum }}({{ row.markEndTimeRatio }})</t-link
@@ -256,6 +289,7 @@
       :process="curProcess"
       ref="DetailDrawerRef"
       type="warn"
+      :sId="serviceId"
     />
   </div>
 </template>
@@ -320,6 +354,9 @@ const columns3 = [
 
 <style lang="less" scoped>
 .sop-analysis {
+  :deep(.t-drawer__close-btn) {
+    z-index: 1;
+  }
   .page-main {
     height: calc(100vh - 57px);
     padding: 15px;

+ 2 - 0
src/views/sop/sop-manage/sop-step/index.vue

@@ -386,6 +386,8 @@ function getFlowApproveHistoryList(data) {
 
 function updateSopInfo(crmInfo) {
   let data = { ...props.sop };
+  data.crmNo = crmInfo.crmNo;
+  data.crmName = crmInfo.crmName;
   data.beginTime = crmInfo.crmBeginTime;
   data.customManagerName = crmInfo.customManagerName;
   data.customManagerTypeStr =