yang 5 lat temu
rodzic
commit
c8ae1f21b3
69 zmienionych plików z 482 dodań i 159 usunięć
  1. 1
    1
      package.json
  2. 14
    3
      src/App.vue
  3. 14
    1
      src/api/bi/business.js
  4. 9
    9
      src/api/bi/customer.js
  5. 1
    1
      src/api/common.js
  6. 1
    1
      src/api/pm/project.js
  7. 1
    1
      src/api/pm/task.js
  8. 1
    1
      src/api/task/task.js
  9. BIN
      src/assets/img/favicon.png
  10. 1
    1
      src/components/RelatedBusiness.vue
  11. 139
    0
      src/components/XrUpgradeDialog.vue
  12. 2
    2
      src/config.js
  13. 2
    2
      src/views/bi/TaskCompleteStatistics.vue
  14. 2
    2
      src/views/bi/achievement/AchievementBackStatistics.vue
  15. 2
    2
      src/views/bi/achievement/AchievementCountStatistics.vue
  16. 2
    2
      src/views/bi/achievement/AchievementInvoiceStatistics.vue
  17. 2
    2
      src/views/bi/achievement/AchievementMoneyStatistics.vue
  18. 2
    2
      src/views/bi/achievement/AchievementSummaryStatistics.vue
  19. 3
    2
      src/views/bi/business/BusinessWinStatistics.vue
  20. 4
    2
      src/views/bi/components/FiltrateHandleView.vue
  21. 2
    2
      src/views/bi/customer/CustomerPoolStatistics.vue
  22. 2
    2
      src/views/bi/customer/CustomerRecordModeStatistics.vue
  23. 2
    2
      src/views/bi/customer/CustomerRecordStatistics.vue
  24. 2
    2
      src/views/bi/customer/CustomerSatisfaction.vue
  25. 2
    2
      src/views/bi/customer/CustomerTotalStatistics.vue
  26. 2
    2
      src/views/bi/customer/ProductSatisfaction.vue
  27. 2
    2
      src/views/bi/customer/components/CycleView.vue
  28. 2
    2
      src/views/bi/oa/Examine.vue
  29. 2
    2
      src/views/bi/oa/Log.vue
  30. 2
    2
      src/views/bi/product/ProductStatistics.vue
  31. 2
    2
      src/views/bi/ranking/RankingAddContactsStatistics.vue
  32. 2
    2
      src/views/bi/ranking/RankingAddCustomerStatistics.vue
  33. 2
    2
      src/views/bi/ranking/RankingContractStatistics.vue
  34. 2
    2
      src/views/bi/ranking/RankingExamineStatistics.vue
  35. 2
    2
      src/views/bi/ranking/RankingProductStatistics.vue
  36. 2
    2
      src/views/bi/ranking/RankingReceivablesStatistics.vue
  37. 2
    2
      src/views/bi/ranking/RankingRecordCustomerStatistics.vue
  38. 2
    2
      src/views/bi/ranking/RankingRecordNunStatistics.vue
  39. 2
    2
      src/views/bi/ranking/RankingSigningStatistics.vue
  40. 2
    0
      src/views/crm/business/Detail.vue
  41. 2
    0
      src/views/crm/components/Activity/LogEditDialog.vue
  42. 29
    26
      src/views/crm/components/CRMEditBaseInfo.vue
  43. 2
    2
      src/views/crm/components/DuplicateCheck/index.vue
  44. 2
    1
      src/views/crm/components/FilterForm/index.vue
  45. 2
    2
      src/views/crm/components/RelativeProduct.vue
  46. 2
    0
      src/views/crm/contacts/Detail.vue
  47. 1
    0
      src/views/crm/contract/Detail.vue
  48. 1
    0
      src/views/crm/customer/Detail.vue
  49. 1
    0
      src/views/crm/invoice/Detail.vue
  50. 1
    1
      src/views/crm/leads/Create.vue
  51. 1
    0
      src/views/crm/leads/Detail.vue
  52. 1
    1
      src/views/crm/message/compenents/CRMMessage.vue
  53. 1
    1
      src/views/crm/mixins/Table.js
  54. 1
    0
      src/views/crm/product/Detail.vue
  55. 2
    0
      src/views/crm/receivables/Detail.vue
  56. 1
    0
      src/views/crm/visit/Detail.vue
  57. 1
    1
      src/views/crm/workbench/components/DataStatistics.vue
  58. 4
    4
      src/views/crm/workbench/components/chartMixins.js
  59. 1
    1
      src/views/crm/workbench/index.vue
  60. 12
    12
      src/views/layout/components/MessageCell.vue
  61. 1
    1
      src/views/layout/components/Sidebar/index.vue
  62. 26
    0
      src/views/oa/journal/NewDialog.vue
  63. 82
    17
      src/views/pm/components/TaskImport.vue
  64. 4
    1
      src/views/pm/project/Corver.vue
  65. 7
    3
      src/views/pm/project/index.vue
  66. 3
    2
      src/views/pm/task/index.vue
  67. 8
    8
      src/views/workLog/index.vue
  68. 40
    0
      static/client.js
  69. BIN
      static/img/logo.png

+ 1
- 1
package.json Wyświetl plik

@@ -36,7 +36,7 @@
36 36
     "nprogress": "0.2.0",
37 37
     "numeral": "^2.0.6",
38 38
     "nzh": "^1.0.4",
39
-    "pinyin-match": "^1.0.9",
39
+    "pinyin-match": "1.0.9",
40 40
     "qrcodejs2": "0.0.2",
41 41
     "throttle-debounce": "^2.1.0",
42 42
     "vue": "2.5.17",

+ 14
- 3
src/App.vue Wyświetl plik

@@ -18,6 +18,7 @@
18 18
       :cache-done="cacheDone"
19 19
       @status="crmImportChange"
20 20
       @close="crmImportClose"/>
21
+    <xr-upgrade-dialog v-if="upgradeDialogShow" :visible.sync="upgradeDialogShow" />
21 22
   </div>
22 23
 </template>
23 24
 
@@ -26,6 +27,7 @@
26 27
 import VuePictureViewer from '@/components/VuePictureViewer/index'
27 28
 import XrImport from '@/components/XrImport'
28 29
 import XrImportMixins from '@/components/XrImport/XrImportMixins'
30
+import XrUpgradeDialog from '@/components/XrUpgradeDialog'
29 31
 import CRMImport from '@/components/CRMImport'
30 32
 import { mapGetters } from 'vuex'
31 33
 import cache from '@/utils/cache'
@@ -36,22 +38,31 @@ export default {
36 38
   components: {
37 39
     VuePictureViewer,
38 40
     XrImport,
39
-    CRMImport
41
+    CRMImport,
42
+    XrUpgradeDialog
40 43
   },
41 44
   mixins: [XrImportMixins],
42 45
   data() {
43 46
     return {
44 47
       showPreviewImg: false,
45 48
       previewIndex: 0,
46
-      previewImgs: []
49
+      previewImgs: [],
50
+      upgradeDialogShow: false
47 51
     }
48 52
   },
49 53
   computed: {
50
-    ...mapGetters(['activeIndex', 'userInfo'])
54
+    ...mapGetters(['activeIndex', 'addRouters', 'userInfo'])
51 55
   },
52 56
   watch: {
53 57
     $route(to, from) {
54 58
       this.showPreviewImg = false // 切换页面隐藏图片预览
59
+    },
60
+    addRouters() {
61
+      if (this.userInfo && this.userInfo.is_read_notice != 1) {
62
+        setTimeout(() => {
63
+          this.upgradeDialogShow = true
64
+        }, 5000)
65
+      }
55 66
     }
56 67
   },
57 68
   mounted() {

+ 14
- 1
src/api/bi/business.js Wyświetl plik

@@ -33,7 +33,20 @@ export function biBusinessTrendListAPI(data) {
33 33
     }
34 34
   })
35 35
 }
36
-
36
+/**
37
+ * 新增商机数与金额趋势分析 详情列表
38
+ * @param {*} data
39
+ */
40
+export function biBusinessConversionRateListAPI(data) {
41
+  return request({
42
+    url: 'bi/business/winList',
43
+    method: 'post',
44
+    data: data,
45
+    headers: {
46
+      'Content-Type': 'application/json;charset=UTF-8'
47
+    }
48
+  })
49
+}
37 50
 /**
38 51
  * 赢单机会转化率趋势分析
39 52
  * @param {*} data

+ 9
- 9
src/api/bi/customer.js Wyświetl plik

@@ -27,7 +27,7 @@ export function biCustomerTotalListAPI(data) {
27 27
 
28 28
 export function biCustomerTotalListExportAPI(data) {
29 29
   return request({
30
-    url: 'bi/contract/excelExport',
30
+    url: 'bi/customer/excelExport',
31 31
     method: 'post',
32 32
     data: data,
33 33
     responseType: 'blob',
@@ -69,7 +69,7 @@ export function biCustomerRecordListAPI(data) {
69 69
 
70 70
 export function biCustomerRecordListExportAPI(data) {
71 71
   return request({
72
-    url: 'bi/contract/excelExport',
72
+    url: 'bi/customer/excelExport',
73 73
     method: 'post',
74 74
     data: data,
75 75
     responseType: 'blob',
@@ -96,7 +96,7 @@ export function biCustomerRecordModeAPI(data) {
96 96
 
97 97
 export function biCustomerRecordModeExportAPI(data) {
98 98
   return request({
99
-    url: 'bi/contract/excelExport',
99
+    url: 'bi/customer/excelExport',
100 100
     method: 'post',
101 101
     data: data,
102 102
     responseType: 'blob',
@@ -169,7 +169,7 @@ export function biCustomerPoolListAPI(data) {
169 169
 
170 170
 export function biCustomerPoolListExportAPI(data) {
171 171
   return request({
172
-    url: 'bi/contract/excelExport',
172
+    url: 'bi/customer/excelExport',
173 173
     method: 'post',
174 174
     data: data,
175 175
     responseType: 'blob',
@@ -196,7 +196,7 @@ export function biCustomerUserCycleAPI(data) {
196 196
 
197 197
 export function biCustomerUserCycleExportAPI(data) {
198 198
   return request({
199
-    url: 'bi/contract/excelExport',
199
+    url: 'bi/customer/excelExport',
200 200
     method: 'post',
201 201
     data: data,
202 202
     responseType: 'blob',
@@ -234,7 +234,7 @@ export function biCustomerAddressCycleAPI(data) {
234 234
 
235 235
 export function biCustomerAddressCycleExportAPI(data) {
236 236
   return request({
237
-    url: 'bi/contract/excelExport',
237
+    url: 'bi/customer/excelExport',
238 238
     method: 'post',
239 239
     data: data,
240 240
     responseType: 'blob',
@@ -261,7 +261,7 @@ export function biCustomerProductCycleAPI(data) {
261 261
 
262 262
 export function biCustomerProductCycleExportAPI(data) {
263 263
   return request({
264
-    url: 'bi/contract/excelExport',
264
+    url: 'bi/customer/excelExport',
265 265
     method: 'post',
266 266
     data: data,
267 267
     responseType: 'blob',
@@ -288,7 +288,7 @@ export function biCustomerSatisfactionTableAPI(data) {
288 288
 
289 289
 export function biCustomerSatisfactionTableExportAPI(data) {
290 290
   return request({
291
-    url: 'bi/contract/excelExport',
291
+    url: 'bi/customer/excelExport',
292 292
     method: 'post',
293 293
     data: data,
294 294
     responseType: 'blob',
@@ -315,7 +315,7 @@ export function biCustomerProductSatisfactionTableAPI(data) {
315 315
 
316 316
 export function biCustomerProductSatisfactionExportAPI(data) {
317 317
   return request({
318
-    url: 'bi/contract/excelExport',
318
+    url: 'bi/customer/excelExport',
319 319
     method: 'post',
320 320
     data: data,
321 321
     responseType: 'blob',

+ 1
- 1
src/api/common.js Wyświetl plik

@@ -354,7 +354,7 @@ export function downloadFileImageAPI(data) {
354 354
  */
355 355
 export function readUpdateNoticeAPI(data) {
356 356
   return request({
357
-    url: 'adminUser/readNotice',
357
+    url: 'admin/adminUser/readNotice',
358 358
     method: 'post',
359 359
     data: data
360 360
   })

+ 1
- 1
src/api/pm/project.js Wyświetl plik

@@ -363,7 +363,7 @@ export function workExcelImportAPI(data) {
363 363
  */
364 364
 export function workDownloadErrorExcelAPI(data) {
365 365
   return request({
366
-    url: 'work/work/downloadErrorExcel',
366
+    url: 'admin/file/download',
367 367
     method: 'post',
368 368
     data: data,
369 369
     responseType: 'blob'

+ 1
- 1
src/api/pm/task.js Wyświetl plik

@@ -137,7 +137,7 @@ export function workTaskRecoverAPI(data) {
137 137
  */
138 138
 export function taskWorkbenchExportAPI(data) {
139 139
   return request({
140
-    url: 'oa/task/excelExport',
140
+    url: 'work/task/excelExport',
141 141
     method: 'post',
142 142
     data: data,
143 143
     responseType: 'blob'

+ 1
- 1
src/api/task/task.js Wyświetl plik

@@ -134,7 +134,7 @@ export function taskDeleteLabelAPI(data) {
134 134
  */
135 135
 export function taskOaExportAPI(data) {
136 136
   return request({
137
-    url: 'work/task/excelExport',
137
+    url: 'oa/task/excelExport',
138 138
     method: 'post',
139 139
     data: data,
140 140
     responseType: 'blob',

BIN
src/assets/img/favicon.png Wyświetl plik


+ 1
- 1
src/components/RelatedBusiness.vue Wyświetl plik

@@ -76,7 +76,7 @@ export default {
76 76
     // 展示取消关联
77 77
     showFoot: {
78 78
       type: Boolean,
79
-      default: false
79
+      default: true
80 80
     },
81 81
     showAdd: {
82 82
       type: Boolean,

+ 139
- 0
src/components/XrUpgradeDialog.vue Wyświetl plik

@@ -0,0 +1,139 @@
1
+<template>
2
+  <el-dialog
3
+    :visible="visible"
4
+    :close-on-click-modal="false"
5
+    class="xr-upgrade-dialog"
6
+    title=""
7
+    width="700px"
8
+    append-to-body
9
+    @close="closeView">
10
+    <el-button class="close-button" icon="el-icon-close" @click="closeView"/>
11
+    <flexbox class="upgrade-header" justify="center" align="center" orient="vertical">
12
+      <span class="upgrade-header__title">升级通知</span>
13
+      <span class="upgrade-header__version">版本{{ WKConfig.version }}</span>
14
+    </flexbox>
15
+    <div class="content">
16
+      <div class="content__title">升级内容:</div>
17
+      <div class="content__content">{{ message }}</div>
18
+    </div>
19
+    <span slot="footer" class="dialog-footer">
20
+      <el-button type="primary" @click="closeView">我知道了</el-button>
21
+    </span>
22
+  </el-dialog>
23
+</template>
24
+
25
+<script>
26
+import { readUpdateNoticeAPI } from '@/api/common'
27
+
28
+export default {
29
+  name: 'XrUpgradeDialog',
30
+  components: {},
31
+  props: {
32
+    visible: Boolean
33
+  },
34
+  data() {
35
+    return {
36
+      message: `修复:
37
+1、修复自定义字段设置隐藏生效问题;
38
+2、修复线索自定义字段转化字段设置生效问题;
39
+3、修复导入数据超过100条部分的数据无法导入问题;
40
+4、修复新建场景保存报错问题;
41
+5、修复客户新建后显示为公海客户,无法操作问题;
42
+6、修复多选字段高级筛选不生效问题;
43
+7、修复产品编辑报错问题;
44
+8、修复部门、人员字段列表展示问题;
45
+9、修复手机、邮箱字段详情编辑校验问题;
46
+10、修复活动记录展示其他客户信息的问题;
47
+11、修复系统提示:“账号在其他地方登录”问题;
48
+12、修复待办事项今日需联系客户标记完成不生效问题;
49
+13、修复仪表盘数据统计错误问题;
50
+14、修复仪表盘遗忘提醒数据查询统计错误问题;
51
+15、修复仪表盘自定义时间、部门筛选数据统计错误问题;
52
+16、修复商业智能自定义时间筛选数据统计错误问题;
53
+17、修复商业智能部门、人员默认筛选数据统计错误问题;
54
+18、修复 72crm-11.0-web(PHP版)部署后部门、成员不展示问题;
55
+19、修复其他已知bug。
56
+20、新增商业智能导出功能。`
57
+    }
58
+  },
59
+  computed: {},
60
+  watch: {},
61
+  mounted() {},
62
+
63
+  beforeDestroy() {},
64
+  methods: {
65
+    closeView() {
66
+      readUpdateNoticeAPI().then(res => {
67
+
68
+      }).catch(() => {})
69
+      this.$emit('update:visible', false)
70
+    }
71
+  }
72
+}
73
+</script>
74
+
75
+<style lang="scss">
76
+.xr-upgrade-dialog {
77
+  .el-dialog__header {
78
+    display: none;
79
+  }
80
+
81
+  .el-dialog__body {
82
+    position: relative;
83
+    padding: 0 0 20px;
84
+    height: 500px;
85
+  }
86
+
87
+  .upgrade-header {
88
+    background-image: url('~@/assets/img/upgrade_bar.png');
89
+    background-repeat: no-repeat;
90
+    background-size: cover;
91
+    height: 131px;
92
+    color: white;
93
+
94
+    &__title {
95
+      display: inline-block;
96
+      font-size: 25px;
97
+      font-weight: bold;
98
+    }
99
+
100
+    &__version {
101
+      display: inline-block;
102
+      margin-top: 15px;
103
+    }
104
+  }
105
+
106
+  .content {
107
+    padding: 20px 30px;
108
+    font-size: 14px;
109
+    position: relative;
110
+    height: 370px;
111
+    overflow-y: auto;
112
+    &__title {
113
+      font-weight: bold;
114
+    }
115
+
116
+    &__content {
117
+      margin-top: 15px;
118
+      white-space: pre-wrap;
119
+      word-wrap: break-word;
120
+      word-break: break-all;
121
+      line-height: 1.5;
122
+    }
123
+  }
124
+
125
+  .close-button {
126
+    position: absolute;
127
+    top: 5px;
128
+    right: 0;
129
+    border: none;
130
+    outline: none;
131
+    background: transparent;
132
+    font-size: 19px;
133
+    font-weight: bold;
134
+    .el-icon-close {
135
+      color: white;
136
+    }
137
+  }
138
+}
139
+</style>

+ 2
- 2
src/config.js Wyświetl plik

@@ -3,8 +3,8 @@ const getLocationOrigin = () => {
3 3
 }
4 4
 
5 5
 const companyName = '悟空CRM'
6
-const version = 'V11.0.1'
7
-const baiduKey = '百度key'
6
+const version = 'V11.0.2'
7
+const baiduKey = 'lcuOQ71SCZhqpxsr1vL2mXoplWEoVctL'
8 8
 
9 9
 export default {
10 10
   version,

+ 2
- 2
src/views/bi/TaskCompleteStatistics.vue Wyświetl plik

@@ -72,9 +72,9 @@
72 72
       </div>
73 73
       <div class="table-content">
74 74
         <div class="handle-bar">
75
-          <!-- <el-button
75
+          <el-button
76 76
             class="export-btn"
77
-            @click="exportClick">导出</el-button> -->
77
+            @click="exportClick">导出</el-button>
78 78
         </div>
79 79
         <el-table
80 80
           v-if="showTable"

+ 2
- 2
src/views/bi/achievement/AchievementBackStatistics.vue Wyświetl plik

@@ -15,9 +15,9 @@
15 15
       </div>
16 16
       <div class="table-content">
17 17
         <div class="handle-bar">
18
-          <!-- <el-button
18
+          <el-button
19 19
             class="export-btn"
20
-            @click="exportClick">导出</el-button> -->
20
+            @click="exportClick">导出</el-button>
21 21
         </div>
22 22
         <el-table
23 23
           :data="list"

+ 2
- 2
src/views/bi/achievement/AchievementCountStatistics.vue Wyświetl plik

@@ -15,9 +15,9 @@
15 15
       </div>
16 16
       <div class="table-content">
17 17
         <div class="handle-bar">
18
-          <!-- <el-button
18
+          <el-button
19 19
             class="export-btn"
20
-            @click="exportClick">导出</el-button> -->
20
+            @click="exportClick">导出</el-button>
21 21
         </div>
22 22
         <el-table
23 23
           :data="list"

+ 2
- 2
src/views/bi/achievement/AchievementInvoiceStatistics.vue Wyświetl plik

@@ -9,10 +9,10 @@
9 9
       module-type="invoice"
10 10
       @load="loading=true"
11 11
       @change="getDataList">
12
-      <!-- <el-button
12
+      <el-button
13 13
         class="export-button"
14 14
         type="primary"
15
-        @click.native="exportClick">导出</el-button> -->
15
+        @click.native="exportClick">导出</el-button>
16 16
     </filtrate-handle-view>
17 17
     <div class="content">
18 18
       <div class="content-title">

+ 2
- 2
src/views/bi/achievement/AchievementMoneyStatistics.vue Wyświetl plik

@@ -15,9 +15,9 @@
15 15
       </div>
16 16
       <div class="table-content">
17 17
         <div class="handle-bar">
18
-          <!-- <el-button
18
+          <el-button
19 19
             class="export-btn"
20
-            @click="exportClick">导出</el-button> -->
20
+            @click="exportClick">导出</el-button>
21 21
         </div>
22 22
         <el-table
23 23
           :data="list"

+ 2
- 2
src/views/bi/achievement/AchievementSummaryStatistics.vue Wyświetl plik

@@ -9,10 +9,10 @@
9 9
       module-type="contract"
10 10
       @load="loading=true"
11 11
       @change="getDataList">
12
-      <!-- <el-button
12
+      <el-button
13 13
         class="export-button"
14 14
         type="primary"
15
-        @click.native="exportClick">导出</el-button> -->
15
+        @click.native="exportClick">导出</el-button>
16 16
     </filtrate-handle-view>
17 17
     <div class="content">
18 18
       <div class="content-title">

+ 3
- 2
src/views/bi/business/BusinessWinStatistics.vue Wyświetl plik

@@ -47,7 +47,8 @@
47 47
 <script>
48 48
 import {
49 49
   biBusinessWinAPI,
50
-  biBusinessTrendListAPI
50
+  // biBusinessTrendListAPI
51
+  biBusinessConversionRateListAPI
51 52
 } from '@/api/bi/business'
52 53
 
53 54
 import ReportList from '@/views/crm/workbench/components/ReportList'
@@ -176,7 +177,7 @@ export default {
176 177
     handleRowClick(row, column, event) {
177 178
       if (column.property != 'name' && row[column.property].replace('%', '') > 0) {
178 179
         this.reportData.title = `${column.label}详情`
179
-        this.reportData.request = biBusinessTrendListAPI
180
+        this.reportData.request = biBusinessConversionRateListAPI
180 181
         const params = { ...this.postParams }
181 182
         params.type = column.label
182 183
         this.reportData.params = params

+ 4
- 2
src/views/bi/components/FiltrateHandleView.vue Wyświetl plik

@@ -120,7 +120,7 @@ import XhUserCell from '@/components/CreateCom/XhUserCell'
120 120
 import TimeTypeSelect from '@/components/TimeTypeSelect'
121 121
 
122 122
 import moment from 'moment'
123
-
123
+import { mapGetters } from 'vuex'
124 124
 export default {
125 125
   name: 'FiltrateHandleView', // 筛选条件
126 126
   components: {
@@ -214,9 +214,11 @@ export default {
214 214
     }
215 215
   },
216 216
   computed: {
217
+    ...mapGetters(['userInfo']),
217 218
     showUserStrucSelect() {
218 219
       return this.showUserSelect
219 220
     }
221
+
220 222
   },
221 223
   watch: {},
222 224
   mounted() {
@@ -321,7 +323,7 @@ export default {
321 323
       const params = {}
322 324
       if (this.showUserStrucSelect) {
323 325
         if (this.dataSelect == 1) {
324
-          params.structure_id = this.structuresSelectValue.length > 0 ? this.structuresSelectValue[0].id : '1'
326
+          params.structure_id = this.structuresSelectValue.length > 0 ? this.structuresSelectValue[0].id : this.userInfo.structure_id
325 327
         }
326 328
       } else {
327 329
         params.structure_id = this.structuresSelectValue.length > 0 ? this.structuresSelectValue[0].id : '1'

+ 2
- 2
src/views/bi/customer/CustomerPoolStatistics.vue Wyświetl plik

@@ -14,9 +14,9 @@
14 14
       </div>
15 15
       <div class="table-content">
16 16
         <div class="handle-bar">
17
-          <!-- <el-button
17
+          <el-button
18 18
             class="export-btn"
19
-            @click="exportClick">导出</el-button> -->
19
+            @click="exportClick">导出</el-button>
20 20
         </div>
21 21
         <el-table
22 22
           v-if="showTable"

+ 2
- 2
src/views/bi/customer/CustomerRecordModeStatistics.vue Wyświetl plik

@@ -18,9 +18,9 @@
18 18
       </div>
19 19
       <div class="table-content">
20 20
         <div class="handle-bar">
21
-          <!-- <el-button
21
+          <el-button
22 22
             class="export-btn"
23
-            @click="exportClick">导出</el-button> -->
23
+            @click="exportClick">导出</el-button>
24 24
         </div>
25 25
         <el-table
26 26
           v-if="showTable"

+ 2
- 2
src/views/bi/customer/CustomerRecordStatistics.vue Wyświetl plik

@@ -14,9 +14,9 @@
14 14
       </div>
15 15
       <div class="table-content">
16 16
         <div class="handle-bar">
17
-          <!-- <el-button
17
+          <el-button
18 18
             class="export-btn"
19
-            @click="exportClick">导出</el-button> -->
19
+            @click="exportClick">导出</el-button>
20 20
         </div>
21 21
         <el-table
22 22
           v-if="showTable"

+ 2
- 2
src/views/bi/customer/CustomerSatisfaction.vue Wyświetl plik

@@ -8,10 +8,10 @@
8 8
       module-type="contract"
9 9
       @load="loading=true"
10 10
       @change="getDataList">
11
-      <!-- <el-button
11
+      <el-button
12 12
         class="export-button"
13 13
         type="primary"
14
-        @click.native="exportClick">导出</el-button> -->
14
+        @click.native="exportClick">导出</el-button>
15 15
     </filtrate-handle-view>
16 16
     <div class="content">
17 17
       <div class="table-content">

+ 2
- 2
src/views/bi/customer/CustomerTotalStatistics.vue Wyświetl plik

@@ -15,9 +15,9 @@
15 15
       </div>
16 16
       <div class="table-content">
17 17
         <div class="handle-bar">
18
-          <!-- <el-button
18
+          <el-button
19 19
             class="export-btn"
20
-            @click="exportClick">导出</el-button> -->
20
+            @click="exportClick">导出</el-button>
21 21
         </div>
22 22
         <el-table
23 23
           v-if="showTable"

+ 2
- 2
src/views/bi/customer/ProductSatisfaction.vue Wyświetl plik

@@ -8,10 +8,10 @@
8 8
       module-type="contract"
9 9
       @load="loading=true"
10 10
       @change="getDataList">
11
-      <!-- <el-button
11
+      <el-button
12 12
         class="export-button"
13 13
         type="primary"
14
-        @click.native="exportClick">导出</el-button> -->
14
+        @click.native="exportClick">导出</el-button>
15 15
     </filtrate-handle-view>
16 16
     <div class="content">
17 17
       <div class="table-content">

+ 2
- 2
src/views/bi/customer/components/CycleView.vue Wyświetl plik

@@ -18,9 +18,9 @@
18 18
       </div>
19 19
       <div class="table-content">
20 20
         <div class="handle-bar">
21
-          <!-- <el-button
21
+          <el-button
22 22
             class="export-btn"
23
-            @click="exportClick">导出</el-button> -->
23
+            @click="exportClick">导出</el-button>
24 24
         </div>
25 25
         <el-table
26 26
           v-if="showTable"

+ 2
- 2
src/views/bi/oa/Examine.vue Wyświetl plik

@@ -8,10 +8,10 @@
8 8
       module-type="oa"
9 9
       @load="loading=true"
10 10
       @change="getDataList">
11
-      <!-- <el-button
11
+      <el-button
12 12
         class="export-button"
13 13
         type="primary"
14
-        @click.native="exportExcel">导出</el-button> -->
14
+        @click.native="exportExcel">导出</el-button>
15 15
     </filtrate-handle-view>
16 16
     <div class="content">
17 17
       <div class="table-content">

+ 2
- 2
src/views/bi/oa/Log.vue Wyświetl plik

@@ -8,10 +8,10 @@
8 8
       module-type="oa"
9 9
       @load="loading=true"
10 10
       @change="getDataList">
11
-      <!-- <el-button
11
+      <el-button
12 12
         class="export-button"
13 13
         type="primary"
14
-        @click.native="exportExcel">导出</el-button> -->
14
+        @click.native="exportExcel">导出</el-button>
15 15
     </filtrate-handle-view>
16 16
     <div class="content">
17 17
       <div class="table-content">

+ 2
- 2
src/views/bi/product/ProductStatistics.vue Wyświetl plik

@@ -8,10 +8,10 @@
8 8
       module-type="product"
9 9
       @load="loading=true"
10 10
       @change="getProductDatalist">
11
-      <!-- <el-button
11
+      <el-button
12 12
         class="export-button"
13 13
         type="primary"
14
-        @click.native="exportClick">导出</el-button> -->
14
+        @click.native="exportClick">导出</el-button>
15 15
     </filtrate-handle-view>
16 16
     <div class="content">
17 17
       <el-table

+ 2
- 2
src/views/bi/ranking/RankingAddContactsStatistics.vue Wyświetl plik

@@ -19,9 +19,9 @@
19 19
       </div>
20 20
       <div class="table-content">
21 21
         <div class="handle-bar">
22
-          <!-- <el-button
22
+          <el-button
23 23
             class="export-btn"
24
-            @click="exportClick">导出</el-button> -->
24
+            @click="exportClick">导出</el-button>
25 25
         </div>
26 26
         <el-table
27 27
           :data="list"

+ 2
- 2
src/views/bi/ranking/RankingAddCustomerStatistics.vue Wyświetl plik

@@ -19,9 +19,9 @@
19 19
       </div>
20 20
       <div class="table-content">
21 21
         <div class="handle-bar">
22
-          <!-- <el-button
22
+          <el-button
23 23
             class="export-btn"
24
-            @click="exportClick">导出</el-button> -->
24
+            @click="exportClick">导出</el-button>
25 25
         </div>
26 26
         <el-table
27 27
           :data="list"

+ 2
- 2
src/views/bi/ranking/RankingContractStatistics.vue Wyświetl plik

@@ -19,9 +19,9 @@
19 19
       </div>
20 20
       <div class="table-content">
21 21
         <div class="handle-bar">
22
-          <!-- <el-button
22
+          <el-button
23 23
             class="export-btn"
24
-            @click="exportClick">导出</el-button> -->
24
+            @click="exportClick">导出</el-button>
25 25
         </div>
26 26
         <el-table
27 27
           :data="list"

+ 2
- 2
src/views/bi/ranking/RankingExamineStatistics.vue Wyświetl plik

@@ -19,9 +19,9 @@
19 19
       </div>
20 20
       <div class="table-content">
21 21
         <div class="handle-bar">
22
-          <!-- <el-button
22
+          <el-button
23 23
             class="export-btn"
24
-            @click="exportClick">导出</el-button> -->
24
+            @click="exportClick">导出</el-button>
25 25
         </div>
26 26
         <el-table
27 27
           :data="list"

+ 2
- 2
src/views/bi/ranking/RankingProductStatistics.vue Wyświetl plik

@@ -19,9 +19,9 @@
19 19
       </div>
20 20
       <div class="table-content">
21 21
         <div class="handle-bar">
22
-          <!-- <el-button
22
+          <el-button
23 23
             class="export-btn"
24
-            @click="exportClick">导出</el-button> -->
24
+            @click="exportClick">导出</el-button>
25 25
         </div>
26 26
         <el-table
27 27
           :data="list"

+ 2
- 2
src/views/bi/ranking/RankingReceivablesStatistics.vue Wyświetl plik

@@ -19,9 +19,9 @@
19 19
       </div>
20 20
       <div class="table-content">
21 21
         <div class="handle-bar">
22
-          <!-- <el-button
22
+          <el-button
23 23
             class="export-btn"
24
-            @click="exportClick">导出</el-button> -->
24
+            @click="exportClick">导出</el-button>
25 25
         </div>
26 26
         <el-table
27 27
           :data="list"

+ 2
- 2
src/views/bi/ranking/RankingRecordCustomerStatistics.vue Wyświetl plik

@@ -19,9 +19,9 @@
19 19
       </div>
20 20
       <div class="table-content">
21 21
         <div class="handle-bar">
22
-          <!-- <el-button
22
+          <el-button
23 23
             class="export-btn"
24
-            @click="exportClick">导出</el-button> -->
24
+            @click="exportClick">导出</el-button>
25 25
         </div>
26 26
         <el-table
27 27
           :data="list"

+ 2
- 2
src/views/bi/ranking/RankingRecordNunStatistics.vue Wyświetl plik

@@ -19,9 +19,9 @@
19 19
       </div>
20 20
       <div class="table-content">
21 21
         <div class="handle-bar">
22
-          <!-- <el-button
22
+          <el-button
23 23
             class="export-btn"
24
-            @click="exportClick">导出</el-button> -->
24
+            @click="exportClick">导出</el-button>
25 25
         </div>
26 26
         <el-table
27 27
           :data="list"

+ 2
- 2
src/views/bi/ranking/RankingSigningStatistics.vue Wyświetl plik

@@ -19,9 +19,9 @@
19 19
       </div>
20 20
       <div class="table-content">
21 21
         <div class="handle-bar">
22
-          <!-- <el-button
22
+          <el-button
23 23
             class="export-btn"
24
-            @click="exportClick">导出</el-button> -->
24
+            @click="exportClick">导出</el-button>
25 25
         </div>
26 26
         <el-table
27 27
           :data="list"

+ 2
- 0
src/views/crm/business/Detail.vue Wyświetl plik

@@ -398,6 +398,8 @@ export default {
398 398
         .then(res => {
399 399
           this.loading = false
400 400
           this.detailData = res.data
401
+          if (this.detailData.dataAuth === 0) return
402
+
401 403
           this.firstContactsId = this.detailData.contacts_id
402 404
 
403 405
           this.headDetails[0].value = res.data.customer_id_info.name

+ 2
- 0
src/views/crm/components/Activity/LogEditDialog.vue Wyświetl plik

@@ -424,6 +424,8 @@ export default {
424 424
       this.$wkUploadFile.upload({
425 425
         file: file,
426 426
         params: {
427
+          module_id: this.id,
428
+          module: 'crm_' + this.crmType,
427 429
           type: type,
428 430
           batchId: this.batchId
429 431
         }

+ 29
- 26
src/views/crm/components/CRMEditBaseInfo.vue Wyświetl plik

@@ -513,7 +513,7 @@ export default {
513 513
       if (this.isSeas) {
514 514
         return false
515 515
       }
516
-      if (this.crmType == 'business' && ['statusName', 'typeName'].includes(item.form_type)) {
516
+      if (this.crmType == 'business' && ['business_type', 'business_status'].includes(item.form_type)) {
517 517
         return false
518 518
       } else if (this.crmType == 'contract' && ['business', 'contacts', 'customer'].includes(item.form_type)) {
519 519
         return false
@@ -578,7 +578,7 @@ export default {
578 578
     },
579 579
 
580 580
     editConfirm() {
581
-      // customerId    fieldId   fieldType  field  formType  value
581
+      // customerId    fieldId   fieldType  field  form_type  value
582 582
       // this.editCancel()
583 583
       this.$refs.editForm0[0].validate(valid => {
584 584
         if (valid) {
@@ -640,38 +640,38 @@ export default {
640 640
 
641 641
     getRealValue(element, value) {
642 642
       if (
643
-        element.formType == 'customer' ||
644
-        element.formType == 'contacts' ||
645
-        element.formType == 'business' ||
646
-        element.formType == 'leads' ||
647
-        element.formType == 'contract'
643
+        element.form_type == 'customer' ||
644
+        element.form_type == 'contacts' ||
645
+        element.form_type == 'business' ||
646
+        element.form_type == 'leads' ||
647
+        element.form_type == 'contract'
648 648
       ) {
649 649
         if (value && value.length) {
650
-          return value[0][`${element.formType}Id`]
650
+          return value[0][`${element.form_type}_id`]
651 651
         } else {
652 652
           return ''
653 653
         }
654 654
       } else if (
655
-        element.formType == 'user' ||
656
-        element.formType == 'single_user' ||
657
-        element.formType == 'structure'
655
+        element.form_type == 'user' ||
656
+        element.form_type == 'single_user' ||
657
+        element.form_type == 'structure'
658 658
       ) {
659 659
         return value
660 660
           .map(item => {
661
-            return (element.formType == 'user' || element.formType == 'single_user') ? item.userId : item.id
661
+            return (element.form_type == 'user' || element.form_type == 'single_user') ? item.id : item.id
662 662
           })
663
-          .join(',')
664
-      } else if (element.formType == 'file') {
663
+          // .join(',')
664
+      } else if (element.form_type == 'file') {
665 665
         if (value && value.length > 0) {
666
-          return value[0].batchId
666
+          return value.map(item => item.file_id)
667 667
         }
668
-        return ''
669
-      } else if (element.formType == 'category') {
668
+        return []
669
+      } else if (element.form_type == 'category') {
670 670
         if (value && value.length > 0) {
671 671
           return value[value.length - 1]
672 672
         }
673 673
         return ''
674
-      } else if (element.formType == 'checkbox') {
674
+      } else if (element.form_type == 'checkbox') {
675 675
         if (value && value.length > 0) {
676 676
           return value.join(',')
677 677
         }
@@ -766,12 +766,15 @@ export default {
766 766
       }
767 767
 
768 768
       // 验证唯一
769
-      if (item.isUnique == 1) {
769
+      if (item.is_unique == 1) {
770 770
         var validateUnique = (rule, value, callback) => {
771 771
           if ((isArray(value) && value.length == 0) || !value) {
772 772
             callback()
773 773
           } else {
774
-            var validatesParams = {}
774
+            var validatesParams = {
775
+              field: item.field,
776
+              types: 'crm_' + this.crmType
777
+            }
775 778
             validatesParams.fieldId = item.fieldId
776 779
             if (isArray(value)) {
777 780
               let postValue = ''
@@ -798,15 +801,15 @@ export default {
798 801
                   postValue = value.join(',')
799 802
                 }
800 803
               }
801
-              validatesParams.value = postValue
804
+              validatesParams.val = postValue
802 805
             } else {
803
-              validatesParams.value = value
806
+              validatesParams.val = value
804 807
             }
805 808
             validatesParams.batchId = this.detail.batchId
806 809
             filedValidatesAPI(validatesParams)
807 810
               .then(res => {
808
-                // status 1 通过 0
809
-                if (res.data.status === 1) {
811
+                // code 200 通过
812
+                if (res.code == 200) {
810 813
                   callback()
811 814
                 } else {
812 815
                   callback(new Error(item.name + '已存在'))
@@ -874,7 +877,7 @@ export default {
874 877
         tempList.push({
875 878
           validator: validateCRMMobile,
876 879
           item: item,
877
-          trigger: []
880
+          trigger: ['blur', 'change']
878 881
         })
879 882
       } else if (item.form_type == 'email') {
880 883
         var validateCRMEmail = (rule, value, callback) => {
@@ -890,7 +893,7 @@ export default {
890 893
         tempList.push({
891 894
           validator: validateCRMEmail,
892 895
           item: item,
893
-          trigger: []
896
+          trigger: ['blur', 'change']
894 897
         })
895 898
       }
896 899
       return tempList

+ 2
- 2
src/views/crm/components/DuplicateCheck/index.vue Wyświetl plik

@@ -288,7 +288,7 @@ export default {
288 288
         })
289 289
           .then(() => {
290 290
             crmCustomerReceiveAPI({
291
-              ids: [data.id],
291
+              customer_id: [data.id],
292 292
               poolId: data.poolAuthList.poolId
293 293
             })
294 294
               .then(res => {
@@ -299,7 +299,7 @@ export default {
299 299
           })
300 300
           .catch(() => {})
301 301
       } else {
302
-        data['customerId'] = data.id
302
+        data['customer_id'] = data.id
303 303
         this.relationData = data
304 304
         this.allocDialogShow = true
305 305
       }

+ 2
- 1
src/views/crm/components/FilterForm/index.vue Wyświetl plik

@@ -497,7 +497,8 @@ export default {
497 497
           o.form_type == 'single_user' ||
498 498
           o.form_type == 'structure' ||
499 499
           o.form_type == 'category' ||
500
-          o.form_type == 'checkbox'
500
+          o.form_type == 'checkbox' ||
501
+          o.form_type == 'select'
501 502
         ) {
502 503
           if (!o.value || o.value.length === 0) {
503 504
             if (o.condition != 'isNull' && o.condition != 'isNotNull') {

+ 2
- 2
src/views/crm/components/RelativeProduct.vue Wyświetl plik

@@ -109,7 +109,7 @@ export default {
109 109
       })
110 110
       this.fieldList.push({ prop: 'unit', width: '200', label: '单位' })
111 111
       this.fieldList.push({ prop: 'price', width: '200', label: '标准价格' })
112
-      this.fieldList.push({ prop: 'salesPrice', width: '200', label: '售价' })
112
+      this.fieldList.push({ prop: 'sales_price', width: '200', label: '售价' })
113 113
       this.fieldList.push({ prop: 'num', width: '200', label: '数量' })
114 114
       this.fieldList.push({
115 115
         prop: 'discount',
@@ -120,7 +120,7 @@ export default {
120 120
     },
121 121
 
122 122
     fieldFormatter(row, column) {
123
-      if (column.property == 'price' || column.property == 'salesPrice') {
123
+      if (column.property == 'price' || column.property == 'sales_price') {
124 124
         return separator(row[column.property] || 0)
125 125
       }
126 126
       return row[column.property]

+ 2
- 0
src/views/crm/contacts/Detail.vue Wyświetl plik

@@ -257,6 +257,8 @@ export default {
257 257
         .then(res => {
258 258
           this.loading = false
259 259
           this.detailData = res.data
260
+          if (this.detailData.dataAuth === 0) return
261
+
260 262
           // 负责人
261 263
           this.headDetails[0].value = res.data.customer_name
262 264
           this.headDetails[1].value = res.data.post

+ 1
- 0
src/views/crm/contract/Detail.vue Wyświetl plik

@@ -277,6 +277,7 @@ export default {
277 277
           // 创建回款计划的时候使用
278 278
           const resData = res.data || {}
279 279
           this.detailData = resData
280
+          if (this.detailData.dataAuth === 0) return
280 281
 
281 282
           this.headDetails[0].value = resData.num
282 283
           this.headDetails[1].value = resData.customer_id_info.name

+ 1
- 0
src/views/crm/customer/Detail.vue Wyświetl plik

@@ -378,6 +378,7 @@ export default {
378 378
           const resData = res.data || {}
379 379
           this.detailData = resData
380 380
           if (resData.dataAuth === 0) return
381
+
381 382
           this.firstContactsId = this.detailData.contacts_id
382 383
           // 公海权限
383 384
           // this.poolAuth = resData.poolAuthList || {}

+ 1
- 0
src/views/crm/invoice/Detail.vue Wyświetl plik

@@ -170,6 +170,7 @@ export default {
170 170
           this.name = res.data.invoice_number
171 171
           this.detailData = res.data
172 172
           this.getBaseList(res.data)
173
+          if (this.detailData.dataAuth === 0) return
173 174
 
174 175
           //   // 负责人
175 176
           this.headDetails[0].value = res.data.customer_name

+ 1
- 1
src/views/crm/leads/Create.vue Wyświetl plik

@@ -123,7 +123,7 @@ export default {
123 123
             // temp.value = item.value
124 124
             const canEdit = this.getItemIsCanEdit(item, this.action.type)
125 125
             // 是否能编辑权限
126
-            if (this.action.type !== 'update') {
126
+            if (canEdit) {
127 127
               fieldRules[temp.field] = this.getRules(item)
128 128
             }
129 129
 

+ 1
- 0
src/views/crm/leads/Detail.vue Wyświetl plik

@@ -194,6 +194,7 @@ export default {
194 194
       crmLeadsReadAPI({ id: this.id })
195 195
         .then(res => {
196 196
           this.detailData = res.data
197
+          if (this.detailData.dataAuth === 0) return
197 198
 
198 199
           this.headDetails[0].value = res.data.name
199 200
           this.headDetails[1].value = res.data.source

+ 1
- 1
src/views/crm/message/compenents/CRMMessage.vue Wyświetl plik

@@ -438,7 +438,7 @@ export default {
438 438
         params.type_id = this.selectionList
439 439
           .map(item => {
440 440
             let temp = []
441
-            const fieldKey = this.crmType === 'receivables_plan' ? 'planId' : `${this.crmType}_id`
441
+            const fieldKey = this.crmType === 'receivables_plan' ? 'plan_id' : `${this.crmType}_id`
442 442
             // temp.typeId = item[fieldKey]
443 443
             temp = item[fieldKey]
444 444
             // 待进入公海提醒 需要的公海id

+ 1
- 1
src/views/crm/mixins/Table.js Wyświetl plik

@@ -434,7 +434,7 @@ export default {
434 434
           this.rowID = row.customer_id
435 435
           this.rowType = 'customer'
436 436
           this.showDview = true
437
-        } else if (column.property === 'contract_number') {
437
+        } else if (column.property === 'contract_num') {
438 438
           this.rowID = row.contract_id
439 439
           this.rowType = 'contract'
440 440
           this.showDview = true

+ 1
- 0
src/views/crm/product/Detail.vue Wyświetl plik

@@ -201,6 +201,7 @@ export default {
201 201
         .then(res => {
202 202
           this.loading = false
203 203
           this.detailData = res.data
204
+          if (this.detailData.dataAuth === 0) return
204 205
 
205 206
           this.headDetails[0].value = res.data.category_id_info
206 207
           this.headDetails[1].value = res.data.unit

+ 2
- 0
src/views/crm/receivables/Detail.vue Wyświetl plik

@@ -169,6 +169,8 @@ export default {
169 169
           this.loading = false
170 170
           this.name = res.data.number
171 171
           this.detailData = res.data
172
+          if (this.detailData.dataAuth === 0) return
173
+
172 174
           //   // 负责人
173 175
           this.headDetails[0].value = res.data.customer_id_info.name
174 176
           this.headDetails[1].value = separator(res.data.contract_id_info.money || 0)

+ 1
- 0
src/views/crm/visit/Detail.vue Wyświetl plik

@@ -142,6 +142,7 @@ export default {
142 142
         .then(res => {
143 143
           this.loading = false
144 144
           this.detailData = res.data
145
+          if (this.detailData.dataAuth === 0) return
145 146
 
146 147
           this.headDetails[0].value = res.data.customer_name
147 148
           this.headDetails[1].value = res.data.visit_time

+ 1
- 1
src/views/crm/workbench/components/DataStatistics.vue Wyświetl plik

@@ -27,7 +27,7 @@
27 27
           跟进汇总
28 28
         </div>
29 29
         <div class="info">
30
-          跟进客户<span class="bold">{{ data.activityNum }}</span>个,新增客户中未跟进<span class="bold">{{ data.allCustomer - data.activityRealNum }}</span>个
30
+          跟进客户<span class="bold">{{ data.activityNum }}</span>个,新增客户中未跟进<span class="bold">{{ data.allCustomer - data.activityNum }}</span>个
31 31
         </div>
32 32
       </div>
33 33
       <div class="list-item">

+ 4
- 4
src/views/crm/workbench/components/chartMixins.js Wyświetl plik

@@ -46,17 +46,17 @@ export default {
46 46
       } else {
47 47
         if (this.filterValue.strucs.length) {
48 48
           params.isUser = 0
49
-          params.deptId = this.filterValue.strucs[0].id
49
+          params.structure_id = [this.filterValue.strucs[0].id]
50 50
         } else {
51 51
           params.isUser = 1
52
-          params.userId = this.filterValue.users.length ? this.filterValue.users[0].id : ''
52
+          params.user_id = this.filterValue.users.length ? this.filterValue.users[0].id : ''
53 53
         }
54 54
       }
55 55
 
56 56
       if (this.filterValue.timeLine.type) {
57 57
         if (this.filterValue.timeLine.type === 'custom') {
58
-          params.startTime = this.filterValue.timeLine.startTime.replace(/\./g, '-')
59
-          params.endTime = this.filterValue.timeLine.endTime.replace(/\./g, '-')
58
+          params.start_time = this.filterValue.timeLine.startTime.replace(/\./g, '-')
59
+          params.end_time = this.filterValue.timeLine.endTime.replace(/\./g, '-')
60 60
         } else {
61 61
           params.type = this.filterValue.timeLine.value || ''
62 62
         }

+ 1
- 1
src/views/crm/workbench/index.vue Wyświetl plik

@@ -231,7 +231,7 @@ export default {
231 231
 
232 232
       // 排序
233 233
       sortLeft: [
234
-        // { 'id': null, 'userId': null, 'modelId': 7, 'list': 1, 'sort': null, 'isHidden': 0, 'companyId': null, 'component': 'RankingStatistics' }, { 'id': null, 'userId': null, 'modelId': 5, 'list': 1, 'sort': null, 'isHidden': 0, 'companyId': null, 'component': 'SalesFunnel' }, { 'id': null, 'userId': null, 'modelId': 4, 'list': 1, 'sort': null, 'isHidden': 0, 'companyId': null, 'component': 'PerformanceChart' }, { 'id': null, 'userId': null, 'modelId': 2, 'list': 1, 'sort': null, 'isHidden': 0, 'companyId': null, 'component': 'DataStatistics' }, { 'id': null, 'userId': null, 'modelId': 6, 'list': 1, 'sort': null, 'isHidden': 0, 'companyId': null, 'component': 'ForgetRemind' }, { 'id': null, 'userId': null, 'modelId': 1, 'list': 1, 'sort': null, 'isHidden': 0, 'companyId': null, 'component': 'SaleStatistics' }
234
+        // { 'id': null, 'user_id': null, 'modelId': 7, 'list': 1, 'sort': null, 'isHidden': 0, 'companyId': null, 'component': 'RankingStatistics' }, { 'id': null, 'user_id': null, 'modelId': 5, 'list': 1, 'sort': null, 'isHidden': 0, 'companyId': null, 'component': 'SalesFunnel' }, { 'id': null, 'user_id': null, 'modelId': 4, 'list': 1, 'sort': null, 'isHidden': 0, 'companyId': null, 'component': 'PerformanceChart' }, { 'id': null, 'user_id': null, 'modelId': 2, 'list': 1, 'sort': null, 'isHidden': 0, 'companyId': null, 'component': 'DataStatistics' }, { 'id': null, 'user_id': null, 'modelId': 6, 'list': 1, 'sort': null, 'isHidden': 0, 'companyId': null, 'component': 'ForgetRemind' }, { 'id': null, 'user_id': null, 'modelId': 1, 'list': 1, 'sort': null, 'isHidden': 0, 'companyId': null, 'component': 'SaleStatistics' }
235 235
       ],
236 236
       sortRight: [],
237 237
       setSortShow: false

+ 12
- 12
src/views/layout/components/MessageCell.vue Wyświetl plik

@@ -115,7 +115,7 @@ export default {
115 115
       if (this.data.label && this.data.label <= 5) {
116 116
         key = ['task', 'log', 'examine', 'announcement', 'schedule'][this.data.label - 1]
117 117
       } else {
118
-        if ([1, 2, 3].includes(this.data.type)) {
118
+        if ([1, 2, 3, 27].includes(this.data.type)) {
119 119
           key = 'task'
120 120
         } else if ([4, 5, 34].includes(this.data.type)) {
121 121
           key = 'log'
@@ -166,14 +166,14 @@ export default {
166 166
         14: `${this.data.user_name}提交 `,
167 167
         15: `${this.data.user_name}拒绝您的`,
168 168
         16: `${this.data.user_name}已经审核通过您的`,
169
-        17: `${this.data.user_name}导入客户数据${this.data.title}条,${this.getImportContent(this.data)}`,
170
-        1500: `${this.data.user_name}取消导入客户数据,已导入${this.data.title}条,${this.getImportContent(this.data)}`,
171
-        18: `${this.data.user_name}导入联系人数据${this.data.title}条,${this.getImportContent(this.data)}`,
169
+        17: `${this.data.user_name}导入客户数据,${this.getImportContent(this.data)}`,
170
+        1500: `${this.data.user_name}取消导入客户数据,已导入,${this.getImportContent(this.data)}`,
171
+        18: `${this.data.user_name}导入联系人数据,${this.getImportContent(this.data)}`,
172 172
         1700: `${this.data.user_name}取消导入联系人数据,已导入${this.data.title}条,${this.getImportContent(this.data)}`,
173
-        19: `${this.data.user_name}导入线索数据${this.data.title}条,${this.getImportContent(this.data)}`,
174
-        1900: `${this.data.user_name}取消导入线索数据,已导入${this.data.title}条,${this.getImportContent(this.data)}`,
175
-        20: `${this.data.user_name}导入产品数据${this.data.title}条,${this.getImportContent(this.data)}`,
176
-        2100: `${this.data.user_name}取消导入产品数据,已导入${this.data.title}条,${this.getImportContent(this.data)}`,
173
+        19: `${this.data.user_name}导入线索数据,${this.getImportContent(this.data)}`,
174
+        1900: `${this.data.user_name}取消导入线索数据,已导入,${this.getImportContent(this.data)}`,
175
+        20: `${this.data.user_name}导入产品数据,${this.getImportContent(this.data)}`,
176
+        2100: `${this.data.user_name}取消导入产品数据,已导入,${this.getImportContent(this.data)}`,
177 177
         22: `${this.data.user_name}将您添加为商机`,
178 178
         21: `${this.data.user_name}将您添加为客户`,
179 179
         23: `${this.data.user_name}将您添加为合同`,
@@ -190,7 +190,7 @@ export default {
190 190
         25: `${this.data.user_name}拒绝您的`,
191 191
         26: `${this.data.user_name}已经审核通过您的`,
192 192
         24: `${this.data.user_name}提交了`,
193
-        27: `${this.data.user_name}项目任务导入`
193
+        27: `${this.data.user_name}项目任务导入数据,${this.getImportContent(this.data)}`
194 194
       }[this.data.type]
195 195
     },
196 196
 
@@ -222,7 +222,7 @@ export default {
222 222
      * 是导入type
223 223
      */
224 224
     isImportType() {
225
-      return this.data.type >= 17 && this.data.type <= 20 || this.data.type == 27
225
+      return (this.data.type >= 17 && this.data.type <= 20) || this.data.type == 27
226 226
     },
227 227
 
228 228
     rightContent() {
@@ -263,7 +263,7 @@ export default {
263 263
         32: `的团队`,
264 264
         33: `的团队`,
265 265
         34: `:“${this.data.content}”,请及时查看`,
266
-        25: `,拒绝理由:“${this.data.content}”,请及时处理`,
266
+        25: `发票审批,拒绝理由:“${this.data.content}”,请及时处理`,
267 267
         26: `发票,请及时查看`,
268 268
         24: `发票审批,请及时处理`,
269 269
         27: ``
@@ -325,7 +325,7 @@ export default {
325 325
     },
326 326
 
327 327
     getImportContent({ title, content }) {
328
-      const countList = [17, 1500, 18, 1700, 19, 1900, 20, 2100, 50]
328
+      const countList = [17, 1500, 18, 1700, 19, 1900, 20, 2100, 50, 27]
329 329
       if (!countList.includes(this.data.type)) {
330 330
         return
331 331
       }

+ 1
- 1
src/views/layout/components/Sidebar/index.vue Wyświetl plik

@@ -56,7 +56,7 @@
56 56
       class="sidebar-bottom">
57 57
       <div class="sidebar-bottom-content">
58 58
         <div v-if="!collapse" class="copyright">
59
-          <img src="/favicon.ico" width="20px" >
59
+          <img src="@/assets/img/favicon.png" width="20px" >
60 60
           <span>Power by 悟空</span>
61 61
         </div>
62 62
         <img

+ 26
- 0
src/views/oa/journal/NewDialog.vue Wyświetl plik

@@ -125,6 +125,7 @@
125 125
           <related-business
126 126
             :margin-left="'0'"
127 127
             :all-data="allData"
128
+            @unbind="unbindRelatedInfo"
128 129
             @checkInfos="checkInfos" />
129 130
         </div>
130 131
       </div>
@@ -310,6 +311,31 @@ export default {
310 311
     }
311 312
   },
312 313
   methods: {
314
+    /**
315
+     * 解绑详情信息
316
+     */
317
+    unbindRelatedInfo(field, item, index) {
318
+      this.$confirm('确认取消关联?', '提示', {
319
+        confirmButtonText: '确定',
320
+        cancelButtonText: '取消',
321
+        type: 'warning',
322
+        customClass: 'is-particulars'
323
+      })
324
+        .then(() => {
325
+          const tempRelatedListData = JSON.parse(JSON.stringify(this.allData))
326
+          tempRelatedListData[field].splice(index, 1)
327
+          this.allData = tempRelatedListData
328
+          var relevanceAll = {}
329
+          relevanceAll.business_ids = this.allData.business.map(item => item.business_id)
330
+          relevanceAll.contacts_ids = this.allData.contacts.map(item => item.contacts_id)
331
+          relevanceAll.contract_ids = this.allData.contract.map(item => item.contract_id)
332
+          relevanceAll.customer_ids = this.allData.customer.map(item => item.customer_id)
333
+          this.relevanceAll = relevanceAll
334
+        })
335
+        .catch(() => {
336
+          this.$message.info('已取消操作')
337
+        })
338
+    },
313 339
     /**
314 340
      * 获取图片内容
315 341
      */

+ 82
- 17
src/views/pm/components/TaskImport.vue Wyświetl plik

@@ -54,9 +54,9 @@
54 54
         <div class="result-info">
55 55
           <i class="wk wk-success result-info__icon" />
56 56
           <p class="result-info__des">数据导入完成</p>
57
-          <p v-if="resultData" class="result-info__detail">导入总数据<span class="result-info__detail--all">{{ resultData.totalSize }}</span>条,导入成功<span class="result-info__detail--suc">{{ resultData.totalSize - resultData.errSize }}</span>条,导入失败<span class="result-info__detail--err">{{ resultData.errSize }}</span>条</p>
57
+          <p v-if="resultData" class="result-info__detail">导入总数据<span class="result-info__detail--all">{{ resultData.total }}</span>条,导入成功<span class="result-info__detail--suc">{{ resultData.total - resultData.error }}</span>条,导入失败<span class="result-info__detail--err">{{ resultData.error }}</span>条</p>
58 58
           <el-button
59
-            v-if="resultData && resultData.errSize > 0"
59
+            v-if="resultData && resultData.error > 0"
60 60
             class="result-info__btn--err"
61 61
             type="text"
62 62
             @click="downloadErrData">下载错误数据</el-button>
@@ -88,7 +88,10 @@ import {
88 88
   workExcelImportAPI,
89 89
   workDownloadErrorExcelAPI
90 90
 } from '@/api/pm/project'
91
-
91
+import {
92
+  crmQueryImportNumAPI,
93
+  crmQueryImportInfoAPI
94
+} from '@/api/crm/common'
92 95
 
93 96
 import { downloadExcelWithResData, verifyFileTypeWithFileName } from '@/utils/index'
94 97
 
@@ -128,7 +131,16 @@ export default {
128 131
           status: 'wait'
129 132
         }
130 133
       ],
131
-      resultData: null
134
+      resultData: null,
135
+      processData: {
136
+        count: 0,
137
+        status: ''
138
+      },
139
+      messageId: null,
140
+      intervalTimer: null,
141
+
142
+      historyPopoverShow: false
143
+
132 144
     }
133 145
   },
134 146
   computed: {
@@ -172,16 +184,18 @@ export default {
172 184
           this.stepList[1].status = 'process'
173 185
           this.stepsActive = 2
174 186
           this.firstUpdateFile(res => {
175
-            this.stepList[1].status = 'finish'
176
-            this.stepsActive = 3
177
-            if (res.data) {
178
-              this.resultData = res.data
179
-              if (this.resultData.errSize > 0) {
180
-                this.stepList[2].status = 'error'
181
-              } else {
182
-                this.stepList[2].status = 'finish'
183
-              }
184
-            }
187
+            this.messageId = res.data
188
+            // this.stepList[1].status = 'finish'
189
+            // this.stepsActive = 3
190
+            // if (res.data) {
191
+            //   this.resultData = res.data
192
+            //   if (this.resultData.errSize > 0) {
193
+            //     this.stepList[2].status = 'error'
194
+            //   } else {
195
+            //     this.stepList[2].status = 'finish'
196
+            //   }
197
+            // }
198
+            this.loopSecondQueryNum()
185 199
           })
186 200
         } else {
187 201
           if (!this.file.name) {
@@ -207,8 +221,8 @@ export default {
207 221
           if (result) {
208 222
             result(res)
209 223
           }
210
-          this.loading = false
211
-          this.$emit('success')
224
+          // this.loading = false
225
+          // this.$emit('success')
212 226
         })
213 227
         .catch(() => {
214 228
           if (result) {
@@ -217,13 +231,64 @@ export default {
217 231
           this.loading = false
218 232
         })
219 233
     },
234
+    /**
235
+     * 第二步查询数量
236
+     */
237
+    loopSecondQueryNum() {
238
+      this.secondQueryNum()
239
+      this.intervalTimer = setInterval(() => {
240
+        if (this.processData.status == 'end') {
241
+          clearInterval(this.intervalTimer)
242
+          this.intervalTimer = null
243
+          this.thirdQueryResult()
244
+        } else {
245
+          this.secondQueryNum()
246
+        }
247
+      }, 2000)
248
+    },
220 249
 
250
+    secondQueryNum() {
251
+      crmQueryImportNumAPI({ messageId: this.messageId })
252
+        .then(res => {
253
+          if (res.data === '') {
254
+            this.processData.status = 'end'
255
+          } else {
256
+            this.processData.status = ''
257
+            this.processData.count = res.data
258
+          }
259
+        })
260
+        .catch(() => {
261
+          // this.processData.status = 'err'
262
+        })
263
+    },
264
+
265
+    /**
266
+     * 第三部 查询结果
267
+     */
268
+    thirdQueryResult() {
269
+      crmQueryImportInfoAPI({ messageId: this.messageId })
270
+        .then(res => {
271
+          this.loading = false
272
+          this.stepList[1].status = 'finish'
273
+          this.stepsActive = 3
274
+          this.$emit('status', 'finish')
275
+          if (res) {
276
+            this.resultData = res.data
277
+            if (res.data.error > 0) {
278
+              this.stepList[2].status = 'error'
279
+            } else {
280
+              this.stepList[2].status = 'finish'
281
+            }
282
+          }
283
+        })
284
+        .catch(() => {})
285
+    },
221 286
     /**
222 287
      * 下载错误模板
223 288
      */
224 289
     downloadErrData() {
225 290
       this.loading = true
226
-      workDownloadErrorExcelAPI({ token: this.resultData.token })
291
+      workDownloadErrorExcelAPI({ name: '导入错误数据', path: this.resultData.error_file_path })
227 292
         .then(res => {
228 293
           downloadExcelWithResData(res)
229 294
           this.loading = false

+ 4
- 1
src/views/pm/project/Corver.vue Wyświetl plik

@@ -162,7 +162,7 @@ export default {
162 162
       tabShowType: 'board',
163 163
       search: '',
164 164
       filterObj: {},
165
-      filterValue: 1,
165
+      filterValue: 4,
166 166
       filterList: [{
167 167
         label: '按最早创建',
168 168
         value: 1
@@ -172,6 +172,9 @@ export default {
172 172
       }, {
173 173
         label: '按最近更新',
174 174
         value: 3
175
+      }, {
176
+        label: '按手动拖动',
177
+        value: 4
175 178
       }],
176 179
       isCreate: false,
177 180
       list: [],

+ 7
- 3
src/views/pm/project/index.vue Wyświetl plik

@@ -37,8 +37,8 @@
37 37
               @submite="setSubmite"
38 38
               @handle="projectSettingsHandle"
39 39
               @click="projectHandleShow = false"/>
40
-            <!-- <p v-if="permission.excelImport" @click="taskImportShow = true">导入任务</p>
41
-            <p v-if="permission.excelExport" @click="exportClick">导出任务</p> -->
40
+            <p v-if="permission.excelImport" @click="taskImportShow = true">导入任务</p>
41
+            <p v-if="permission.excelExport" @click="exportClick">导出任务</p>
42 42
             <p
43 43
               v-if="permission.archiveTask && permission.setWork"
44 44
               @click="archiveProject">归档项目</p>
@@ -447,7 +447,11 @@ export default {
447 447
       this.projectHandleShow = false
448 448
       this.loading = true
449 449
       workTaskExportAPI({
450
-        work_id: this.work_id
450
+        work_id: this.work_id,
451
+        search: this.taskConditionObj.search,
452
+        owner_user_id: this.taskConditionObj.userIds,
453
+        time_type: this.taskConditionObj.timeId,
454
+        label_id: this.taskConditionObj.tagIds
451 455
       })
452 456
         .then(res => {
453 457
           downloadExcelWithResData(res)

+ 3
- 2
src/views/pm/task/index.vue Wyświetl plik

@@ -8,7 +8,7 @@
8 8
       ft-top="0"
9 9
       @search="searchClick">
10 10
       <span slot="label">我的任务</span>
11
-      <!-- <el-popover
11
+      <el-popover
12 12
         slot="label"
13 13
         v-model="taskHandleShow"
14 14
         placement="bottom-start"
@@ -19,7 +19,7 @@
19 19
         <i
20 20
           slot="reference"
21 21
           class="wk wk-manage set-img" />
22
-      </el-popover> -->
22
+      </el-popover>
23 23
       <template slot="ft">
24 24
         <el-dropdown
25 25
           trigger="click"
@@ -523,6 +523,7 @@ export default {
523 523
       this.taskHandleShow = false
524 524
       this.loading = true
525 525
       taskWorkbenchExportAPI({
526
+        is_top: 5,
526 527
         search: this.search,
527 528
         sort_field: this.filterValue.sort,
528 529
         completed_task: this.filterValue.completed_task,

+ 8
- 8
src/views/workLog/index.vue Wyświetl plik

@@ -252,7 +252,7 @@ export default {
252 252
 
253 253
       filterForm: {
254 254
         category_id: 0,
255
-        send_user_id: ''
255
+        create_user_id: ''
256 256
       },
257 257
       userSelects: [],
258 258
 
@@ -364,7 +364,7 @@ export default {
364 364
     }
365 365
     this.filterForm = {
366 366
       category_id: 0,
367
-      send_user_id: ''
367
+      create_user_id: ''
368 368
     }
369 369
     this.userSelects = []
370 370
 
@@ -518,8 +518,8 @@ export default {
518 518
         }[this.logType]
519 519
       }
520 520
 
521
-      if (this.logType == 'send' && params.hasOwnProperty('send_user_id')) {
522
-        delete params.send_user_id
521
+      if (this.logType == 'send' && params.hasOwnProperty('create_user_id')) {
522
+        delete params.create_user_id
523 523
       }
524 524
 
525 525
       if (params.hasOwnProperty('category_id') && params.category_id === 0) {
@@ -649,11 +649,11 @@ export default {
649 649
     userChange(data) {
650 650
       this.userSelects = data.value || []
651 651
       if (data.value.length > 0) {
652
-        this.filterForm.send_user_id = data.value.map(item => {
652
+        this.filterForm.create_user_id = data.value.map(item => {
653 653
           return item.id
654 654
         })
655 655
       } else {
656
-        this.filterForm.send_user_id = ''
656
+        this.filterForm.create_user_id = ''
657 657
       }
658 658
     },
659 659
 
@@ -663,9 +663,9 @@ export default {
663 663
     checkUserHistory(user) {
664 664
       this.userSelects = user ? [user] : []
665 665
       if (user) {
666
-        this.filterForm.send_user_id = user.id
666
+        this.filterForm.create_user_id = user.id
667 667
       } else {
668
-        this.filterForm.send_user_id = ''
668
+        this.filterForm.create_user_id = ''
669 669
       }
670 670
     },
671 671
 

+ 40
- 0
static/client.js Wyświetl plik

@@ -54,6 +54,46 @@
54 54
     }
55 55
   }
56 56
 
57
+  window.onload = function() {
58
+    var n = document.createElement('div')
59
+    n.style.position = 'fixed'
60
+    n.style.bottom = '2px'
61
+    n.style.left = '0'
62
+    n.style.right = '0'
63
+    n.style.textAlign = 'center'
64
+    n.style.fontSize = '12px'
65
+    n.style.color = '#999'
66
+    n.style.zIndex = 1
67
+
68
+    var i = document.createElement('img')
69
+    i.style.width = '14px'
70
+    i.style.verticalAlign = 'bottom'
71
+    i.style.marginRight = '5px'
72
+
73
+    var img = new Image()
74
+    img.onload = function() {
75
+      var canvas = document.createElement('canvas')
76
+      var ctx = canvas.getContext('2d')
77
+
78
+      canvas.height = img.naturalHeight
79
+      canvas.width = img.naturalWidth
80
+      ctx.drawImage(img, 0, 0)
81
+
82
+      var uri = canvas.toDataURL('image/png')
83
+      i.src = uri
84
+      n.appendChild(i)
85
+      var ti = ''
86
+      var tis = [80, 111, 119, 101, 114, 32, 98, 121, 32]
87
+      tis.forEach(c => {
88
+        ti = ti + String.fromCharCode(c)
89
+      })
90
+      var t = document.createTextNode(ti + decodeURI('%E6%82%9F%E7%A9%BA'))
91
+      n.appendChild(t)
92
+      document.body.appendChild(n)
93
+    }
94
+    img.src = 'static/img/logo.png'
95
+  }
96
+
57 97
   if (Sys.appName === 'IE' && Number(Sys.version) < 10) {
58 98
     window.location.href = './static/index.html'
59 99
   }

BIN
static/img/logo.png Wyświetl plik