yang пре 5 година
родитељ
комит
c8ae1f21b3
69 измењених фајлова са 482 додато и 159 уклоњено
  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 Прегледај датотеку

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

+ 14
- 3
src/App.vue Прегледај датотеку

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

+ 14
- 1
src/api/bi/business.js Прегледај датотеку

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
  * @param {*} data
52
  * @param {*} data

+ 9
- 9
src/api/bi/customer.js Прегледај датотеку

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

+ 1
- 1
src/api/common.js Прегледај датотеку

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

+ 1
- 1
src/api/pm/project.js Прегледај датотеку

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

+ 1
- 1
src/api/pm/task.js Прегледај датотеку

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

+ 1
- 1
src/api/task/task.js Прегледај датотеку

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

BIN
src/assets/img/favicon.png Прегледај датотеку


+ 1
- 1
src/components/RelatedBusiness.vue Прегледај датотеку

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

+ 139
- 0
src/components/XrUpgradeDialog.vue Прегледај датотеку

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 Прегледај датотеку

3
 }
3
 }
4
 
4
 
5
 const companyName = '悟空CRM'
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
 export default {
9
 export default {
10
   version,
10
   version,

+ 2
- 2
src/views/bi/TaskCompleteStatistics.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/achievement/AchievementBackStatistics.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/achievement/AchievementCountStatistics.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/achievement/AchievementInvoiceStatistics.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/achievement/AchievementMoneyStatistics.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/achievement/AchievementSummaryStatistics.vue Прегледај датотеку

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

+ 3
- 2
src/views/bi/business/BusinessWinStatistics.vue Прегледај датотеку

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

+ 4
- 2
src/views/bi/components/FiltrateHandleView.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/customer/CustomerPoolStatistics.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/customer/CustomerRecordModeStatistics.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/customer/CustomerRecordStatistics.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/customer/CustomerSatisfaction.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/customer/CustomerTotalStatistics.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/customer/ProductSatisfaction.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/customer/components/CycleView.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/oa/Examine.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/oa/Log.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/product/ProductStatistics.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/ranking/RankingAddContactsStatistics.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/ranking/RankingAddCustomerStatistics.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/ranking/RankingContractStatistics.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/ranking/RankingExamineStatistics.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/ranking/RankingProductStatistics.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/ranking/RankingReceivablesStatistics.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/ranking/RankingRecordCustomerStatistics.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/ranking/RankingRecordNunStatistics.vue Прегледај датотеку

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

+ 2
- 2
src/views/bi/ranking/RankingSigningStatistics.vue Прегледај датотеку

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

+ 2
- 0
src/views/crm/business/Detail.vue Прегледај датотеку

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

+ 2
- 0
src/views/crm/components/Activity/LogEditDialog.vue Прегледај датотеку

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

+ 29
- 26
src/views/crm/components/CRMEditBaseInfo.vue Прегледај датотеку

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

+ 2
- 2
src/views/crm/components/DuplicateCheck/index.vue Прегледај датотеку

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

+ 2
- 1
src/views/crm/components/FilterForm/index.vue Прегледај датотеку

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

+ 2
- 2
src/views/crm/components/RelativeProduct.vue Прегледај датотеку

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

+ 2
- 0
src/views/crm/contacts/Detail.vue Прегледај датотеку

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

+ 1
- 0
src/views/crm/contract/Detail.vue Прегледај датотеку

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

+ 1
- 0
src/views/crm/customer/Detail.vue Прегледај датотеку

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

+ 1
- 0
src/views/crm/invoice/Detail.vue Прегледај датотеку

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

+ 1
- 1
src/views/crm/leads/Create.vue Прегледај датотеку

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

+ 1
- 0
src/views/crm/leads/Detail.vue Прегледај датотеку

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

+ 1
- 1
src/views/crm/message/compenents/CRMMessage.vue Прегледај датотеку

438
         params.type_id = this.selectionList
438
         params.type_id = this.selectionList
439
           .map(item => {
439
           .map(item => {
440
             let temp = []
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
             // temp.typeId = item[fieldKey]
442
             // temp.typeId = item[fieldKey]
443
             temp = item[fieldKey]
443
             temp = item[fieldKey]
444
             // 待进入公海提醒 需要的公海id
444
             // 待进入公海提醒 需要的公海id

+ 1
- 1
src/views/crm/mixins/Table.js Прегледај датотеку

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

+ 1
- 0
src/views/crm/product/Detail.vue Прегледај датотеку

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

+ 2
- 0
src/views/crm/receivables/Detail.vue Прегледај датотеку

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

+ 1
- 0
src/views/crm/visit/Detail.vue Прегледај датотеку

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

+ 1
- 1
src/views/crm/workbench/components/DataStatistics.vue Прегледај датотеку

27
           跟进汇总
27
           跟进汇总
28
         </div>
28
         </div>
29
         <div class="info">
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
         </div>
31
         </div>
32
       </div>
32
       </div>
33
       <div class="list-item">
33
       <div class="list-item">

+ 4
- 4
src/views/crm/workbench/components/chartMixins.js Прегледај датотеку

46
       } else {
46
       } else {
47
         if (this.filterValue.strucs.length) {
47
         if (this.filterValue.strucs.length) {
48
           params.isUser = 0
48
           params.isUser = 0
49
-          params.deptId = this.filterValue.strucs[0].id
49
+          params.structure_id = [this.filterValue.strucs[0].id]
50
         } else {
50
         } else {
51
           params.isUser = 1
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
       if (this.filterValue.timeLine.type) {
56
       if (this.filterValue.timeLine.type) {
57
         if (this.filterValue.timeLine.type === 'custom') {
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
         } else {
60
         } else {
61
           params.type = this.filterValue.timeLine.value || ''
61
           params.type = this.filterValue.timeLine.value || ''
62
         }
62
         }

+ 1
- 1
src/views/crm/workbench/index.vue Прегледај датотеку

231
 
231
 
232
       // 排序
232
       // 排序
233
       sortLeft: [
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
       sortRight: [],
236
       sortRight: [],
237
       setSortShow: false
237
       setSortShow: false

+ 12
- 12
src/views/layout/components/MessageCell.vue Прегледај датотеку

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

+ 1
- 1
src/views/layout/components/Sidebar/index.vue Прегледај датотеку

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

+ 26
- 0
src/views/oa/journal/NewDialog.vue Прегледај датотеку

125
           <related-business
125
           <related-business
126
             :margin-left="'0'"
126
             :margin-left="'0'"
127
             :all-data="allData"
127
             :all-data="allData"
128
+            @unbind="unbindRelatedInfo"
128
             @checkInfos="checkInfos" />
129
             @checkInfos="checkInfos" />
129
         </div>
130
         </div>
130
       </div>
131
       </div>
310
     }
311
     }
311
   },
312
   },
312
   methods: {
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 Прегледај датотеку

54
         <div class="result-info">
54
         <div class="result-info">
55
           <i class="wk wk-success result-info__icon" />
55
           <i class="wk wk-success result-info__icon" />
56
           <p class="result-info__des">数据导入完成</p>
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
           <el-button
58
           <el-button
59
-            v-if="resultData && resultData.errSize > 0"
59
+            v-if="resultData && resultData.error > 0"
60
             class="result-info__btn--err"
60
             class="result-info__btn--err"
61
             type="text"
61
             type="text"
62
             @click="downloadErrData">下载错误数据</el-button>
62
             @click="downloadErrData">下载错误数据</el-button>
88
   workExcelImportAPI,
88
   workExcelImportAPI,
89
   workDownloadErrorExcelAPI
89
   workDownloadErrorExcelAPI
90
 } from '@/api/pm/project'
90
 } from '@/api/pm/project'
91
-
91
+import {
92
+  crmQueryImportNumAPI,
93
+  crmQueryImportInfoAPI
94
+} from '@/api/crm/common'
92
 
95
 
93
 import { downloadExcelWithResData, verifyFileTypeWithFileName } from '@/utils/index'
96
 import { downloadExcelWithResData, verifyFileTypeWithFileName } from '@/utils/index'
94
 
97
 
128
           status: 'wait'
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
   computed: {
146
   computed: {
172
           this.stepList[1].status = 'process'
184
           this.stepList[1].status = 'process'
173
           this.stepsActive = 2
185
           this.stepsActive = 2
174
           this.firstUpdateFile(res => {
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
         } else {
200
         } else {
187
           if (!this.file.name) {
201
           if (!this.file.name) {
207
           if (result) {
221
           if (result) {
208
             result(res)
222
             result(res)
209
           }
223
           }
210
-          this.loading = false
211
-          this.$emit('success')
224
+          // this.loading = false
225
+          // this.$emit('success')
212
         })
226
         })
213
         .catch(() => {
227
         .catch(() => {
214
           if (result) {
228
           if (result) {
217
           this.loading = false
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
     downloadErrData() {
289
     downloadErrData() {
225
       this.loading = true
290
       this.loading = true
226
-      workDownloadErrorExcelAPI({ token: this.resultData.token })
291
+      workDownloadErrorExcelAPI({ name: '导入错误数据', path: this.resultData.error_file_path })
227
         .then(res => {
292
         .then(res => {
228
           downloadExcelWithResData(res)
293
           downloadExcelWithResData(res)
229
           this.loading = false
294
           this.loading = false

+ 4
- 1
src/views/pm/project/Corver.vue Прегледај датотеку

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

+ 7
- 3
src/views/pm/project/index.vue Прегледај датотеку

37
               @submite="setSubmite"
37
               @submite="setSubmite"
38
               @handle="projectSettingsHandle"
38
               @handle="projectSettingsHandle"
39
               @click="projectHandleShow = false"/>
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
             <p
42
             <p
43
               v-if="permission.archiveTask && permission.setWork"
43
               v-if="permission.archiveTask && permission.setWork"
44
               @click="archiveProject">归档项目</p>
44
               @click="archiveProject">归档项目</p>
447
       this.projectHandleShow = false
447
       this.projectHandleShow = false
448
       this.loading = true
448
       this.loading = true
449
       workTaskExportAPI({
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
         .then(res => {
456
         .then(res => {
453
           downloadExcelWithResData(res)
457
           downloadExcelWithResData(res)

+ 3
- 2
src/views/pm/task/index.vue Прегледај датотеку

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

+ 8
- 8
src/views/workLog/index.vue Прегледај датотеку

252
 
252
 
253
       filterForm: {
253
       filterForm: {
254
         category_id: 0,
254
         category_id: 0,
255
-        send_user_id: ''
255
+        create_user_id: ''
256
       },
256
       },
257
       userSelects: [],
257
       userSelects: [],
258
 
258
 
364
     }
364
     }
365
     this.filterForm = {
365
     this.filterForm = {
366
       category_id: 0,
366
       category_id: 0,
367
-      send_user_id: ''
367
+      create_user_id: ''
368
     }
368
     }
369
     this.userSelects = []
369
     this.userSelects = []
370
 
370
 
518
         }[this.logType]
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
       if (params.hasOwnProperty('category_id') && params.category_id === 0) {
525
       if (params.hasOwnProperty('category_id') && params.category_id === 0) {
649
     userChange(data) {
649
     userChange(data) {
650
       this.userSelects = data.value || []
650
       this.userSelects = data.value || []
651
       if (data.value.length > 0) {
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
           return item.id
653
           return item.id
654
         })
654
         })
655
       } else {
655
       } else {
656
-        this.filterForm.send_user_id = ''
656
+        this.filterForm.create_user_id = ''
657
       }
657
       }
658
     },
658
     },
659
 
659
 
663
     checkUserHistory(user) {
663
     checkUserHistory(user) {
664
       this.userSelects = user ? [user] : []
664
       this.userSelects = user ? [user] : []
665
       if (user) {
665
       if (user) {
666
-        this.filterForm.send_user_id = user.id
666
+        this.filterForm.create_user_id = user.id
667
       } else {
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 Прегледај датотеку

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
   if (Sys.appName === 'IE' && Number(Sys.version) < 10) {
97
   if (Sys.appName === 'IE' && Number(Sys.version) < 10) {
58
     window.location.href = './static/index.html'
98
     window.location.href = './static/index.html'
59
   }
99
   }

BIN
static/img/logo.png Прегледај датотеку