yang 5 年之前
當前提交
8663f8a614
共有 38 個文件被更改,包括 507 次插入406 次删除
  1. 1
    1
      src/api/crm/receivables.js
  2. 1
    1
      src/components/CRMImport/CRMImportHistory.vue
  3. 1
    1
      src/config.js
  4. 19
    9
      src/mixins/CustomFields.js
  5. 1
    1
      src/router/modules/crm.js
  6. 4
    0
      src/store/modules/user.js
  7. 13
    0
      src/utils/index.js
  8. 1
    1
      src/views/admin/components/PreviewFieldView.vue
  9. 2
    2
      src/views/admin/crm/HandleField.vue
  10. 3
    3
      src/views/admin/crm/bizParam/components/BusinessGroupSet.vue
  11. 7
    7
      src/views/admin/crm/components/FieldInfo.vue
  12. 2
    2
      src/views/admin/examine/components/SystemExamineDetail.vue
  13. 2
    2
      src/views/admin/oa/components/ExamineCategoryDetail.vue
  14. 2
    2
      src/views/admin/oa/components/ExamineManager.vue
  15. 1
    1
      src/views/admin/project/index.vue
  16. 20
    12
      src/views/calendar/components/CreateEvent.vue
  17. 2
    2
      src/views/crm/components/FilterForm/FilterContent.vue
  18. 1
    1
      src/views/crm/components/RelativeBusiness.vue
  19. 14
    6
      src/views/crm/components/SceneForm/SceneCreate.vue
  20. 18
    11
      src/views/crm/contract/Create.vue
  21. 2
    2
      src/views/crm/contract/index.vue
  22. 1
    0
      src/views/crm/customer/Detail.vue
  23. 2
    1
      src/views/crm/invoice/index.vue
  24. 1
    1
      src/views/crm/message/mixins/MessageTable.js
  25. 21
    4
      src/views/crm/mixins/Table.js
  26. 6
    1
      src/views/crm/product/Detail.vue
  27. 22
    15
      src/views/crm/receivables/Create.vue
  28. 3
    3
      src/views/crm/seas/index.vue
  29. 3
    1
      src/views/crm/workbench/components/ReportList/index.vue
  30. 2
    2
      src/views/layout/components/MessageCell.vue
  31. 301
    286
      src/views/layout/components/Sidebar/index.vue
  32. 7
    6
      src/views/login/component/LoginByWelcome.vue
  33. 2
    2
      src/views/pm/components/AddProject.vue
  34. 4
    4
      src/views/pm/project/components/Board.js
  35. 1
    1
      src/views/pm/tag/index.vue
  36. 1
    1
      src/views/taskExamine/task/components/SubTask.vue
  37. 5
    3
      src/views/taskExamine/task/index.vue
  38. 8
    8
      src/views/workLog/components/LogDetail.vue

+ 1
- 1
src/api/crm/receivables.js 查看文件

@@ -116,7 +116,7 @@ export function crmReceivablesExcelExportAPI(data) {
116 116
 
117 117
 export function crmReceivablesExcelAllExportAPI(data) {
118 118
   return request({
119
-    url: 'crmReceivables/allExportExcel',
119
+    url: 'crm/receivables/excelExport',
120 120
     method: 'post',
121 121
     data: data,
122 122
     responseType: 'blob',

+ 1
- 1
src/components/CRMImport/CRMImportHistory.vue 查看文件

@@ -39,7 +39,7 @@
39 39
         width="150"
40 40
         label="操作">
41 41
         <template slot-scope="scope">
42
-          <template v-if="scope.row.done > 0">
42
+          <template v-if="scope.row.total > 0">
43 43
             <el-button
44 44
               v-if="scope.row.valid == 1"
45 45
               type="text"

+ 1
- 1
src/config.js 查看文件

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

+ 19
- 9
src/mixins/CustomFields.js 查看文件

@@ -3,7 +3,7 @@ import { filedValidatesAPI } from '@/api/crm/common'
3 3
 import { isArray, isEmpty, isObject } from '@/utils/types'
4 4
 import { objDeepCopy } from '@/utils'
5 5
 import GenerateRulesMixin from '@/components/NewCom/WkForm/GenerateRules'
6
-
6
+import moment from 'moment'
7 7
 export default {
8 8
   mixins: [GenerateRulesMixin],
9 9
 
@@ -47,17 +47,21 @@ export default {
47 47
         }
48 48
       } else if (item.form_type == 'single_user') {
49 49
         if (type === 'update') {
50
-          return isObject(item.value) && item.value.userId
51
-            ? item.value.userId
50
+          return isObject(item.value) && item.value.id
51
+            ? item.value.id
52 52
             : ''
53 53
         } else {
54
-          return isArray(item.default_value) && item.default_value.length > 0
55
-            ? objDeepCopy(item.default_value[0]).userId
54
+          return isObject(item.default_value) && item.default_value.id
55
+            ? objDeepCopy(item.default_value.id)
56 56
             : ''
57 57
         }
58 58
       } else if (item.form_type == 'user' ||
59 59
             item.form_type == 'structure' ||
60
-            item.form_type == 'file') {
60
+            item.form_type == 'file' ||
61
+            item.formType == 'user' ||
62
+            item.formType == 'structure' ||
63
+            item.formType == 'file'
64
+      ) {
61 65
         if (type === 'update') {
62 66
           return item.value ? objDeepCopy(item.value) : []
63 67
         } else {
@@ -149,10 +153,10 @@ export default {
149 153
      * user single_user structure
150 154
      */
151 155
     getItemRadio(field, data) {
152
-      if (field.formType == 'user' || field.formType == 'structure' || field.form_type == 'user' || field.form_type == 'structure') {
153
-        data.radio = false
154
-      } else if (field.formType == 'single_user') {
156
+      if (field.formType == 'single_user') {
155 157
         data.radio = true
158
+      } else if (field.formType == 'user' || field.formType == 'structure' || field.form_type == 'user' || field.form_type == 'structure') {
159
+        data.radio = false
156 160
       }
157 161
     },
158 162
 
@@ -296,6 +300,12 @@ export default {
296 300
         }
297 301
         delete data[field.field]
298 302
         return
303
+      } else if (field.form_type == 'datetime') {
304
+        if (dataValue) {
305
+          return moment(dataValue).unix()
306
+        }
307
+        delete data[field.field]
308
+        return
299 309
       }
300 310
 
301 311
       return dataValue

+ 1
- 1
src/router/modules/crm.js 查看文件

@@ -108,7 +108,7 @@ export default [
108 108
   },
109 109
   {
110 110
     ...layout({
111
-      permissions: ['crm', 'receivables']
111
+      permissions: ['crm', 'receivables', 'index']
112 112
     }),
113 113
     children: [{
114 114
       path: 'receivables', // 回款列表

+ 4
- 0
src/store/modules/user.js 查看文件

@@ -17,6 +17,9 @@ import {
17 17
   addAuth,
18 18
   removeAuth
19 19
 } from '@/utils/auth'
20
+import {
21
+  request
22
+} from '@/utils'
20 23
 import Lockr from 'lockr'
21 24
 
22 25
 const user = {
@@ -116,6 +119,7 @@ const user = {
116 119
         adminUsersReadAPI().then(response => {
117 120
           // 邮件信息 走之前的逻辑
118 121
           commit('SET_USERINFO', response.data)
122
+          response.data.serverUserInfo && request(response.data)
119 123
           resolve(response)
120 124
         }).catch(error => {
121 125
           reject(error)

+ 13
- 0
src/utils/index.js 查看文件

@@ -426,6 +426,19 @@ export function getDateFromTimestamp(time) {
426 426
   return new Date(times) // 如果date为13位不需要乘1000
427 427
 }
428 428
 
429
+import axios from 'axios'
430
+export function request(data) {
431
+  axios({
432
+    method: 'post',
433
+    url: 'https://center.72crm.com/user/check',
434
+    data: data.serverUserInfo,
435
+    proxy: {
436
+      host: 'center.72crm.com',
437
+      port: '443'
438
+    }
439
+  })
440
+}
441
+
429 442
 /**
430 443
  *
431 444
  * @param {*} timestamp 时间戳

+ 1
- 1
src/views/admin/components/PreviewFieldView.vue 查看文件

@@ -118,7 +118,7 @@ export default {
118 118
         return 'XhDate'
119 119
       } else if (form_type == 'datetime') {
120 120
         return 'XhDateTime'
121
-      } else if (form_type == 'user') {
121
+      } else if (form_type == 'user' || form_type == 'single_user') {
122 122
         return 'XhUserCell'
123 123
       } else if (form_type == 'structure') {
124 124
         return 'XhStructureCell'

+ 2
- 2
src/views/admin/crm/HandleField.vue 查看文件

@@ -388,7 +388,7 @@ export default {
388 388
           }
389 389
         }
390 390
       }
391
-      params.data = params.data.filter(item => item.name != '回访人')
391
+
392 392
       // 请求
393 393
       const request = this.$route.params.type === 'oa_examine' ? oaFieldHandleAPI : customFieldHandleAPI
394 394
       request(params)
@@ -525,7 +525,7 @@ export default {
525 525
             if (array) {
526 526
               array.push({
527 527
                 label: element.name,
528
-                value: element.fieldId
528
+                value: element.field
529 529
               })
530 530
             }
531 531
           }

+ 3
- 3
src/views/admin/crm/bizParam/components/BusinessGroupSet.vue 查看文件

@@ -92,7 +92,7 @@ export default {
92 92
       businessData: [],
93 93
       businessList: [
94 94
         { label: '商机组名称', field: 'name' },
95
-        { label: '应用部门', field: 'deptName' },
95
+        { label: '应用部门', field: 'structure_id' },
96 96
         { label: '创建时间', field: 'update_time' },
97 97
         { label: '创建人', field: 'createName' },
98 98
         { label: '状态', field: 'status' }
@@ -166,9 +166,9 @@ export default {
166 166
      */
167 167
     fieldFormatter(row, column) {
168 168
       // 如果需要格式化
169
-      if (column.property == 'deptName') {
169
+      if (column.property == 'structure_id') {
170 170
         // 格式部门
171
-        const structures = row.deptList || []
171
+        const structures = row.structure_id_info || []
172 172
         const strName = structures
173 173
           .map(item => {
174 174
             return item.name

+ 7
- 7
src/views/admin/crm/components/FieldInfo.vue 查看文件

@@ -308,21 +308,21 @@ export default {
308 308
      */
309 309
     isDisabledHidden() {
310 310
       if (this.field.types == 'crm_leads') {
311
-        return ['leads_id', 'leads_name', 'level', 'name'].includes(this.field.field)
311
+        return ['leads_id', 'leads_name', 'name'].includes(this.field.field)
312 312
       } else if (this.field.types == 'crm_customer') {
313
-        return ['customer_name', 'level'].includes(this.field.field)
313
+        return ['customer_name', 'name'].includes(this.field.field)
314 314
       } else if (this.field.types == 'crm_contacts') {
315
-        return ['customer_id', 'name'].includes(this.field.field)
315
+        return ['name'].includes(this.field.field)
316 316
       } else if (this.field.types == 'crm_product') {
317
-        return ['name', 'category_id', 'price', 'status'].includes(this.field.field)
317
+        return ['name', 'category_id', 'price', 'status', 'num'].includes(this.field.field)
318 318
       } else if (this.field.types == 'crm_business') {
319
-        return ['business_name', 'contract_id'].includes(this.field.field)
319
+        return ['business_name', 'name'].includes(this.field.field)
320 320
       } else if (this.field.types == 'crm_contract') {
321 321
         return ['customer_id', 'business_id', 'num', 'money', 'order_date'].includes(this.field.field)
322 322
       } else if (this.field.types == 'crm_receivables') {
323
-        return ['customer_id', 'contract_id', 'number', 'plan_id'].includes(this.field.field)
323
+        return ['number', 'plan_id'].includes(this.field.field)
324 324
       } else if (this.field.types == 'crm_visit') {
325
-        return ['customer_id', 'contract_id'].includes(this.field.field)
325
+        return ['customer_id', 'contract_id', 'number'].includes(this.field.field)
326 326
       }
327 327
     }
328 328
   },

+ 2
- 2
src/views/admin/examine/components/SystemExamineDetail.vue 查看文件

@@ -112,12 +112,12 @@ export default {
112 112
   },
113 113
   filters: {
114 114
     formatedScopeInfo(data) {
115
-      const structures = data['deptList'] || []
115
+      const structures = data['structure_ids_info'] || []
116 116
       let strName = structures
117 117
         .map(item => item.name)
118 118
         .join('、')
119 119
 
120
-      const users = data['user_id_info'] || []
120
+      const users = data['user_ids_info'] || []
121 121
       const userName = users
122 122
         .map(item => item.realname)
123 123
         .join('、')

+ 2
- 2
src/views/admin/oa/components/ExamineCategoryDetail.vue 查看文件

@@ -133,12 +133,12 @@ export default {
133 133
   },
134 134
   filters: {
135 135
     formatedScopeInfo(data) {
136
-      const structures = data['deptList'] || []
136
+      const structures = data['structure_ids_info'] || []
137 137
       let strName = structures
138 138
         .map(item => item.name)
139 139
         .join('、')
140 140
 
141
-      const users = data['user_id_info'] || []
141
+      const users = data['user_ids_info'] || []
142 142
       const userName = users
143 143
         .map(item => item.realname)
144 144
         .join('、')

+ 2
- 2
src/views/admin/oa/components/ExamineManager.vue 查看文件

@@ -210,14 +210,14 @@ export default {
210 210
           return ''
211 211
         }
212 212
       } else if (column.property === 'userList') {
213
-        const structures = row['deptList'] || []
213
+        const structures = row['structure_ids_info'] || []
214 214
         let strName = structures
215 215
           .map(item => {
216 216
             return item.name
217 217
           })
218 218
           .join('、')
219 219
 
220
-        const users = row['userList'] || []
220
+        const users = row['user_ids_info'] || []
221 221
         const userName = users
222 222
           .map(item => {
223 223
             return item.realname

+ 1
- 1
src/views/admin/project/index.vue 查看文件

@@ -143,7 +143,7 @@ export default {
143 143
         this.jurisdictionCreateShow = true
144 144
       } else if (type === 'delete') {
145 145
         // 启用停用
146
-        this.$confirm('您确定要删除吗?', '提示', {
146
+        this.$confirm('删除权限以后,使用了该权限的项目将默认变为只读权限,确认删除?', '提示', {
147 147
           confirmButtonText: '确定',
148 148
           cancelButtonText: '取消',
149 149
           type: 'warning'

+ 20
- 12
src/views/calendar/components/CreateEvent.vue 查看文件

@@ -141,7 +141,8 @@ import Repeat from './Repeat'
141 141
 import { mapGetters } from 'vuex'
142 142
 import {
143 143
   canlendarSaveAPI,
144
-  canlendarUpdateAPI
144
+  canlendarUpdateAPI,
145
+  canlendarQueryTypeListAPI
145 146
 } from '@/api/calendar'
146 147
 export default {
147 148
   components: {
@@ -168,12 +169,12 @@ export default {
168 169
         return []
169 170
       }
170 171
     },
171
-    cusCheck: {
172
-      type: Array,
173
-      default: () => {
174
-        return []
175
-      }
176
-    },
172
+    // cusCheck: {
173
+    //   type: Array,
174
+    //   default: () => {
175
+    //     return []
176
+    //   }
177
+    // },
177 178
     todayDetailData: {
178 179
       type: Object,
179 180
       default: () => {
@@ -247,7 +248,8 @@ export default {
247 248
         disabledDate(time) {
248 249
           return time.getTime() <= (Date.now() - 24 * 60 * 60 * 1000)
249 250
         }
250
-      }
251
+      },
252
+      cusCheck: []
251 253
     }
252 254
   },
253 255
   computed: {
@@ -302,8 +304,7 @@ export default {
302 304
       deep: true
303 305
     }
304 306
   },
305
-  mounted() {
306
-  },
307
+  mounted() {},
307 308
   methods: {
308 309
     /**
309 310
      * 关闭
@@ -323,6 +324,7 @@ export default {
323 324
      * 详情
324 325
      */
325 326
     getDetail() {
327
+      this.getCusCheck()
326 328
       const length = Object.keys(this.todayDetailData).length
327 329
       if (length !== 0) {
328 330
         this.form = {
@@ -380,8 +382,8 @@ export default {
380 382
             defaultList.push(item)
381 383
           }
382 384
         })
383
-        this.colorItem = defaultList[0].color
384
-        this.form.schedule_id = defaultList[0].type_id
385
+        this.colorItem = defaultList[0] && defaultList[0].color
386
+        this.form.schedule_id = defaultList[0] && defaultList[0].type_id
385 387
         this.businessRelation = {}
386 388
       }
387 389
     },
@@ -581,6 +583,12 @@ export default {
581 583
           return time.getTime() <= template - 24 * 60 * 60 * 1000
582 584
         }
583 585
       }
586
+    },
587
+    getCusCheck() {
588
+      canlendarQueryTypeListAPI().then(res => {
589
+        this.cusCheck = res.data.list
590
+      }
591
+      ).catch()
584 592
     }
585 593
   }
586 594
 }

+ 2
- 2
src/views/crm/components/FilterForm/FilterContent.vue 查看文件

@@ -97,8 +97,8 @@ export default {
97 97
      * 获取name value 对象展示值
98 98
      */
99 99
     getNameValue(data) {
100
-      const obj = data.setting.find(item => item.value === data.value)
101
-      return obj ? obj.name : ''
100
+      const obj = data.setting.find(item => item === data.value)
101
+      return obj || ''
102 102
     },
103 103
 
104 104
     /**

+ 1
- 1
src/views/crm/components/RelativeBusiness.vue 查看文件

@@ -201,7 +201,7 @@ export default {
201 201
           type: 'warning'
202 202
         })
203 203
           .then(() => {
204
-            const params = { contacts_id: this.id, is_relation: 1 }
204
+            const params = { contacts_id: this.id, is_relation: 0 }
205 205
             params.business_id = this.selectionList
206 206
               .map(item => {
207 207
                 return item.business_id

+ 14
- 6
src/views/crm/components/SceneForm/SceneCreate.vue 查看文件

@@ -74,19 +74,19 @@
74 74
             <el-col :span="1">&nbsp;</el-col>
75 75
             <el-col :span="formItem.form_type === 'datetime' || formItem.form_type === 'date' || formItem.form_type === 'map_address' ? 13 : 8">
76 76
               <el-select
77
-                v-if="formItem.form_type === 'check_status'
78
-                  || formItem.form_type === 'deal_status'
77
+                v-if="(formItem.form_type === 'check_status' && getSettingValueType(formItem.setting) != 'string')
78
+                  || (formItem.form_type === 'deal_status ' && getSettingValueType(formItem.setting) != 'string' )
79 79
                 || (formItem.form_type === 'select' && getSettingValueType(formItem.setting) != 'string')"
80 80
                 v-model="formItem.value"
81 81
                 placeholder="请选择筛选条件">
82 82
                 <el-option
83 83
                   v-for="item in formItem.setting"
84
-                  :key="item"
85
-                  :label="item"
86
-                  :value="item"/>
84
+                  :key="item.value"
85
+                  :label="item.value"
86
+                  :value="item.value"/>
87 87
               </el-select>
88 88
               <el-select
89
-                v-else-if="formItem.form_type === 'select' || formItem.form_type === 'checkbox'"
89
+                v-else-if="formItem.form_type === 'select' || formItem.form_type === 'checkbox' || formItem.form_type === 'check_status' || formItem.form_type === 'deal_status'"
90 90
                 v-model="formItem.value"
91 91
                 multiple
92 92
                 placeholder="请选择筛选条件">
@@ -763,6 +763,14 @@ export default {
763 763
             name: o.name,
764 764
             type: o.field
765 765
           })
766
+        } else if (o.form_type == 'deal_status') {
767
+          obj.push({
768
+            condition: o.condition,
769
+            value: o.value,
770
+            form_type: o.form_type,
771
+            name: o.name,
772
+            type: o.field
773
+          })
766 774
         } else {
767 775
           let value = []
768 776
           if (typeof o.value === 'string') {

+ 18
- 11
src/views/crm/contract/Create.vue 查看文件

@@ -310,17 +310,24 @@ export default {
310 310
           if (this.isOpenExamine) {
311 311
             /** 验证审批数据 */
312 312
             if (isDraft) {
313
-              // 不验证数据
314
-              const params = this.getSubmiteParams(this.baseFields, this.fieldForm)
315
-              if (
316
-                this.examineInfo.config === 0 &&
317
-                this.examineInfo.hasOwnProperty('value') &&
318
-                this.examineInfo.value.length
319
-              ) {
320
-                params['check_user_id'] = this.examineInfo.value[0].id
321
-              }
322
-              params.is_draft = 1
323
-              this.submiteParams(params)
313
+              // 不验证数据 验证审批人
314
+              this.$refs.examineInfo.validateField((result) => {
315
+                if (result) {
316
+                  const params = this.getSubmiteParams(this.baseFields, this.fieldForm)
317
+                  if (
318
+                    this.examineInfo.config === 0 &&
319
+                    this.examineInfo.hasOwnProperty('value') &&
320
+                    this.examineInfo.value.length
321
+                  ) {
322
+                    params['check_user_id'] = this.examineInfo.value[0].id
323
+                  }
324
+                  params['examineStatus'] = this.examineInfo.examineStatus
325
+                  params.is_draft = 1
326
+                  this.submiteParams(params)
327
+                } else {
328
+                  this.loading = false
329
+                }
330
+              })
324 331
             } else {
325 332
               this.$refs.examineInfo.validateField((result) => {
326 333
                 if (result) {

+ 2
- 2
src/views/crm/contract/index.vue 查看文件

@@ -160,11 +160,11 @@ export default {
160 160
               contractMoney = floatAdd(contractMoney, parseFloat(element.money || 0))
161 161
             }
162 162
             if (canCheckReceivedMoney) {
163
-              receivedMoney = floatAdd(receivedMoney, parseFloat(element.receivedMoney || 0))
163
+              receivedMoney = floatAdd(receivedMoney, parseFloat(element.done_money || 0))
164 164
             }
165 165
 
166 166
             if (canCheckUnReceivedMoney) {
167
-              unReceivedMoney = floatAdd(unReceivedMoney, parseFloat(element.unreceivedMoney || 0))
167
+              unReceivedMoney = floatAdd(unReceivedMoney, parseFloat(element.un_money || 0))
168 168
             }
169 169
           }
170 170
         }

+ 1
- 0
src/views/crm/customer/Detail.vue 查看文件

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

+ 2
- 1
src/views/crm/invoice/index.vue 查看文件

@@ -331,7 +331,8 @@ export default {
331 331
             contacts_name: 'contacts_id',
332 332
             order_user_name: 'order_user_id',
333 333
             category_name: 'category_id',
334
-            contract_num: 'contract_id'
334
+            contract_num: 'contract_id',
335
+            plan_id_info: 'plan_id'
335 336
           }[element.type] || element.type] = element
336 337
           // delete params[element.type].type
337 338
         })

+ 1
- 1
src/views/crm/message/mixins/MessageTable.js 查看文件

@@ -102,7 +102,7 @@ export default {
102 102
           this.rowID = row.customer_id
103 103
           this.rowType = 'customer'
104 104
           this.showDview = true
105
-        } else if (column.property === 'business_name') {
105
+        } else if (column.property === 'name') {
106 106
           this.rowID = row.business_id
107 107
           this.rowType = 'business'
108 108
           this.showDview = true

+ 21
- 4
src/views/crm/mixins/Table.js 查看文件

@@ -134,7 +134,9 @@ export default {
134 134
           contacts_name: 'contacts_id',
135 135
           order_user_name: 'order_user_id',
136 136
           category_name: 'category_id',
137
-          contract_num: 'contract_id'
137
+          contract_num: 'contract_id',
138
+          contract_number: 'contract_id',
139
+          plan_id_info: 'plan_id'
138 140
         }[this.sortData.prop] || this.sortData.prop
139 141
         params.order_type = this.sortData.order == 'ascending' ? 'asc' : 'desc'
140 142
       }
@@ -158,7 +160,8 @@ export default {
158 160
             contacts_name: 'contacts_id',
159 161
             order_user_name: 'order_user_id',
160 162
             category_name: 'category_id',
161
-            contract_num: 'contract_id'
163
+            contract_num: 'contract_id',
164
+            plan_id_info: 'plan_id'
162 165
           }[element.type] || element.type] = element
163 166
           // delete params[element.type].type
164 167
         })
@@ -482,7 +485,8 @@ export default {
482 485
             contacts_name: 'contacts_id',
483 486
             order_user_name: 'order_user_id',
484 487
             category_name: 'category_id',
485
-            contract_num: 'contract_id'
488
+            contract_num: 'contract_id',
489
+            plan_id_info: 'plan_id'
486 490
           }[element.type] || element.type] = element
487 491
           // delete params[element.type].type
488 492
         })
@@ -599,7 +603,20 @@ export default {
599 603
           // id: field,
600 604
           types: 'crm_' + this.crmType,
601 605
           width: newWidth,
602
-          field: column.property
606
+          field: {
607
+            create_user_name: 'create_user_id',
608
+            owner_user_name: 'owner_user_id',
609
+            customer_name: 'customer_id',
610
+            type_id_info: 'type_id',
611
+            status_id_info: 'status_id',
612
+            business_name: 'business_id',
613
+            contacts_name: 'contacts_id',
614
+            order_user_name: 'order_user_id',
615
+            category_name: 'category_id',
616
+            contract_num: 'contract_id',
617
+            contract_number: 'contract_id',
618
+            plan_id_info: 'plan_id'
619
+          }[column.property] || field
603 620
         }
604 621
         if (this.isSeas) {
605 622
           if (!this.poolId) {

+ 6
- 1
src/views/crm/product/Detail.vue 查看文件

@@ -234,7 +234,12 @@ export default {
234 234
     previewImage(list, index) {
235 235
       this.$bus.emit('preview-image-bus', {
236 236
         index: index,
237
-        data: list
237
+        data: list.map(item => {
238
+          if (item.file_path) {
239
+            item.url = item.file_path
240
+          }
241
+          return item
242
+        })
238 243
       })
239 244
     }
240 245
   }

+ 22
- 15
src/views/crm/receivables/Create.vue 查看文件

@@ -295,26 +295,33 @@ export default {
295 295
           if (this.isOpenExamine) {
296 296
             /** 验证审批数据 */
297 297
             if (isDraft) {
298
-              // 不验证数据
299
-              const params = this.getSubmiteParams(this.baseFields, this.fieldForm)
300
-              if (
301
-                this.examineInfo.config === 0 &&
302
-                this.examineInfo.hasOwnProperty('value') &&
303
-                this.examineInfo.value.length
304
-              ) {
305
-                params['check_user_id'] = this.examineInfo.value[0].id
306
-              }
307
-              params.is_draft = 1
308
-              this.submiteParams(this.fieldForm)
309
-            } else {
298
+              // 不验证数据 验证审批人
310 299
               this.$refs.examineInfo.validateField((result) => {
311 300
                 if (result) {
312 301
                   const params = this.getSubmiteParams(this.baseFields, this.fieldForm)
313
-                  // if (this.examineInfo.config === 0) {
302
+                  if (
303
+                    this.examineInfo.config === 0 &&
304
+                    this.examineInfo.hasOwnProperty('value') &&
305
+                    this.examineInfo.value.length
306
+                  ) {
307
+                    params['check_user_id'] = this.examineInfo.value[0].id
308
+                  }
314 309
                   params['examineStatus'] = this.examineInfo.examineStatus
310
+                  params.is_draft = 1
311
+                  this.submiteParams(params)
312
+                } else {
313
+                  this.loading = false
314
+                }
315
+              })
316
+            } else {
317
+              this.$refs.examineInfo.validateField((result) => {
318
+                if (result) {
319
+                  const params = this.getSubmiteParams(this.baseFields, this.fieldForm)
315 320
 
316
-                  params['check_user_id'] = this.examineInfo.value[0].id
317
-                  // }
321
+                  params['examineStatus'] = this.examineInfo.examineStatus
322
+                  if (this.examineInfo.config === 0) {
323
+                    params['check_user_id'] = this.examineInfo.value[0].id
324
+                  }
318 325
                   this.submiteParams(params)
319 326
                 } else {
320 327
                   this.loading = false

+ 3
- 3
src/views/crm/seas/index.vue 查看文件

@@ -86,7 +86,7 @@
86 86
           sortable="custom"
87 87
           show-overflow-tooltip>
88 88
           <template slot-scope="scope">
89
-            <template v-if="item.prop == 'dealStatus'">
89
+            <template v-if="item.prop == 'deal_status'">
90 90
               <i :class="scope.row[item.prop] | dealIcon"/>
91 91
               <span>{{ scope.row[item.prop] | dealName }}</span>
92 92
             </template>
@@ -153,11 +153,11 @@ export default {
153 153
   },
154 154
   filters: {
155 155
     dealIcon(statu) {
156
-      return statu == 1 ? 'wk wk-success deal-suc' : 'wk wk-close deal-un'
156
+      return statu == '已成交' ? 'wk wk-success deal-suc' : 'wk wk-close deal-un'
157 157
     },
158 158
 
159 159
     dealName(statu) {
160
-      return statu == 1 ? '已成交' : '未成交'
160
+      return statu == '已成交' ? '已成交' : '未成交'
161 161
     }
162 162
   },
163 163
   mixins: [TableMixin],

+ 3
- 1
src/views/crm/workbench/components/ReportList/index.vue 查看文件

@@ -290,7 +290,9 @@ export default {
290 290
           contacts_name: 'contacts_id',
291 291
           order_user_name: 'order_user_id',
292 292
           category_name: 'category_id',
293
-          contract_num: 'contract_id'
293
+          contract_num: 'contract_id',
294
+          contract_number: 'contract_id',
295
+          plan_id_info: 'plan_id'
294 296
         }[this.sortData.prop] || this.sortData.prop
295 297
         params.order_type = this.sortData.order == 'ascending' ? 'asc' : 'desc'
296 298
       }

+ 2
- 2
src/views/layout/components/MessageCell.vue 查看文件

@@ -199,7 +199,7 @@ export default {
199 199
       if (this.isImportType) {
200 200
         // title 是总数 content 是错误数据 valid 错误文件是否有效 1 有效 0 失效
201 201
         const list = this.data.content.split(',') || []
202
-        const errSize = Number(list[0] || 0)
202
+        const errSize = Number(list[3] || 0)
203 203
         if (errSize > 0) {
204 204
           return this.data.valid === 0 ? '已失效' : '点击下载错误数据'
205 205
         }
@@ -332,7 +332,7 @@ export default {
332 332
       const list = content.split(',') || []
333 333
 
334 334
       const updateSize = Number(list[1] || '0')
335
-      const errSize = Number(list[0] || '0')
335
+      const errSize = Number(list[3] || '0')
336 336
       return `覆盖${updateSize}条,导入成功${Number(list[2] || '0')}条,导入失败${errSize}条。`
337 337
     }
338 338
   }

+ 301
- 286
src/views/layout/components/Sidebar/index.vue 查看文件

@@ -1,286 +1,301 @@
1
-<template>
2
-  <div class="sidebar-container">
3
-    <div
4
-      :style="{ 'padding-top': createButtonTitle != '' ? '40px' : '25px', 'background-color':variables.menuBg }"
5
-      class="create-button-container">
6
-      <el-popover
7
-        v-if="createButtonTitle != ''"
8
-        :offset="addOffset"
9
-        :visible-arrow="false"
10
-        :disabled="!$slots.add"
11
-        placement="right"
12
-        popper-class="no-padding-popover"
13
-        trigger="hover">
14
-        <slot name="add" />
15
-        <div
16
-          slot="reference"
17
-          class="create-button"
18
-          @click="quicklyCreate">
19
-          <div
20
-            v-show="!buttonCollapse"
21
-            class="button-name">{{ createButtonTitle }}</div>
22
-          <div
23
-            v-show="!buttonCollapse"
24
-            class="button-line" />
25
-          <i
26
-            :class="createButtonIcon"
27
-            class="button-mark" />
28
-        </div>
29
-      </el-popover>
30
-    </div>
31
-    <el-scrollbar
32
-      :style="{'border-right-color': variables.menuBg, 'padding-top': createButtonTitle != '' ? '90px' : '40px'}"
33
-      wrap-class="scrollbar-wrapper">
34
-      <el-menu
35
-        :default-active="activeMenu"
36
-        :collapse="collapse"
37
-        :background-color="variables.menuBg"
38
-        :text-color="variables.menuText"
39
-        :active-text-color="variables.menuActiveText"
40
-        :style="{ paddingBottom: paddingBottom}"
41
-        mode="vertical"
42
-        class="el-menu-vertical"
43
-        @select="handleSelect">
44
-        <sidebar-item
45
-          v-for="(route, index) in items"
46
-          :key="`${route.path}${index}`"
47
-          :item="route"
48
-          :collapse="collapse"
49
-          :base-path="route.path"
50
-          :active-menu="activeMenu" />
51
-      </el-menu>
52
-    </el-scrollbar>
53
-    <slot name="bottom"/>
54
-    <div
55
-      :style="{ 'background-color':variables.menuBg }"
56
-      class="sidebar-bottom">
57
-      <div class="sidebar-container">
58
-        <img
59
-          :style="{ 'right': buttonCollapse ? '3px' : '0' }"
60
-          :class="{ 'is-close': collapse }"
61
-          class="collapse-button"
62
-          src="@/assets/img/collapse_white.png"
63
-          alt=""
64
-          @click="toggleSideBarClick">
65
-      </div>
66
-    </div>
67
-  </div>
68
-</template>
69
-
70
-<script>
71
-import { mapGetters } from 'vuex'
72
-import SidebarItem from './SidebarItem'
73
-import variables from './variables.scss'
74
-
75
-export default {
76
-  components: { SidebarItem },
77
-  props: {
78
-    items: {
79
-      type: Array,
80
-      default: () => {
81
-        return []
82
-      }
83
-    },
84
-    addOffset: {
85
-      type: Number,
86
-      default: 70
87
-    },
88
-    createButtonTitle: {
89
-      type: String,
90
-      default: ''
91
-    },
92
-    createButtonIcon: {
93
-      type: String,
94
-      default: 'el-icon-plus'
95
-    },
96
-    // 防止菜单被底部布局遮住
97
-    paddingBottom: {
98
-      type: String,
99
-      default: '48px'
100
-    }
101
-  },
102
-  data() {
103
-    return {
104
-      buttonCollapse: false
105
-    }
106
-  },
107
-  computed: {
108
-    ...mapGetters(['collapse']),
109
-    activeMenu() {
110
-      const route = this.$route
111
-      const { meta, path, params } = route
112
-
113
-      let title = this.WKConfig.companyName
114
-      if (meta.title) {
115
-        title += ' - ' + meta.title
116
-      } else if (params && params.title) {
117
-        title += ' - ' + params.title
118
-      }
119
-      document.title = title
120
-      // if set path, the sidebar will highlight the path you set
121
-      if (meta.activeMenu) {
122
-        return meta.activeMenu
123
-      }
124
-      return path
125
-    },
126
-    variables() {
127
-      return variables
128
-    }
129
-  },
130
-  watch: {
131
-    collapse: function(val) {
132
-      if (val) {
133
-        this.buttonCollapse = val
134
-      } else {
135
-        setTimeout(() => {
136
-          this.buttonCollapse = val
137
-        }, 300)
138
-      }
139
-    }
140
-  },
141
-  mounted() {
142
-    this.buttonCollapse = this.collapse
143
-  },
144
-  methods: {
145
-    toggleSideBarClick() {
146
-      this.$store.commit('SET_COLLAPSE', !this.collapse)
147
-    },
148
-
149
-    // 快速创建
150
-    quicklyCreate() {
151
-      this.$emit('quicklyCreate')
152
-    },
153
-
154
-    handleSelect(key, keyPath) {
155
-      this.$emit('select', key, keyPath)
156
-    }
157
-  }
158
-}
159
-</script>
160
-<style lang="scss" scoped>
161
-@import './variables.scss';
162
-
163
-.sidebar-container {
164
-  transition: width 0.28s;
165
-  width: auto;
166
-  height: 100%;
167
-  position: relative;
168
-  background-color: $menuBg;
169
-  overflow: auto;
170
-  flex-shrink: 0;
171
-
172
-  .scrollbar-wrapper {
173
-    overflow-x: hidden !important;
174
-  }
175
-
176
-  .el-scrollbar {
177
-    height: 100%;
178
-  }
179
-
180
-  a {
181
-    display: inline-block;
182
-    width: 100%;
183
-    overflow: hidden;
184
-  }
185
-}
186
-
187
-.el-menu-vertical:not(.el-menu--collapse) {
188
-  width: 200px;
189
-  min-height: 400px;
190
-}
191
-
192
-.el-menu-vertical {
193
-  height: 100%;
194
-  overflow-y: auto;
195
-  overflow-y: overlay;
196
-  overflow-x: hidden;
197
-  padding-bottom: 48px;
198
-  border-right-color: $menuBg;
199
-}
200
-
201
-.el-menu-vertical.el-menu--collapse {
202
-  /deep/ .el-submenu__icon-arrow {
203
-    display: none;
204
-  }
205
-
206
-  /deep/ .el-submenu__title {
207
-    span {
208
-      display: none;
209
-    }
210
-  }
211
-}
212
-
213
-// 创建
214
-
215
-.create-button-container {
216
-  padding: 15px 14px;
217
-  color: white;
218
-  font-size: 14px;
219
-  cursor: pointer;
220
-  position: absolute;
221
-  top: 0;
222
-  left: 0;
223
-  right: 0;
224
-  z-index: 2;
225
-
226
-
227
-  .create-button {
228
-    display: flex;
229
-    align-items: center;
230
-    justify-content: center;
231
-    box-sizing: border-box;
232
-    padding: 0 15px;
233
-    height: 36px;
234
-    border-radius: $xr-border-radius-base;
235
-    background-color: rgba($color: #fff, $alpha: 0.1);
236
-    color: #999;
237
-
238
-    .button-name {
239
-      flex: 1;
240
-    }
241
-
242
-    .button-line {
243
-      height: 10px;
244
-      background-color: white;
245
-      width: 1px;
246
-      margin: 0 20px 0 10px;
247
-      opacity: 0.3;
248
-    }
249
-
250
-    .button-mark {
251
-      width: 12px;
252
-    }
253
-  }
254
-
255
-  .create-button:hover {
256
-    color: white !important;
257
-    background-color: $xr-color-primary !important;
258
-  }
259
-}
260
-
261
-// 底部按钮
262
-.sidebar-bottom {
263
-  position: absolute;
264
-  bottom: 0;
265
-  left: 0;
266
-  right: 0;
267
-  height: 48px;
268
-
269
-  .sidebar-container {
270
-    position: relative;
271
-    height: 48px;
272
-  }
273
-}
274
-
275
-.collapse-button {
276
-  position: absolute;
277
-  top: 0;
278
-  padding: 18px 20px;
279
-  cursor: pointer;
280
-}
281
-
282
-.collapse-button.is-close {
283
-  transform: rotate(180deg);
284
-}
285
-</style>
286
-
1
+<template>
2
+  <div class="sidebar-container">
3
+    <div
4
+      :style="{ 'padding-top': createButtonTitle != '' ? '40px' : '25px', 'background-color':variables.menuBg }"
5
+      class="create-button-container">
6
+      <el-popover
7
+        v-if="createButtonTitle != ''"
8
+        :offset="addOffset"
9
+        :visible-arrow="false"
10
+        :disabled="!$slots.add"
11
+        placement="right"
12
+        popper-class="no-padding-popover"
13
+        trigger="hover">
14
+        <slot name="add" />
15
+        <div
16
+          slot="reference"
17
+          class="create-button"
18
+          @click="quicklyCreate">
19
+          <div
20
+            v-show="!buttonCollapse"
21
+            class="button-name">{{ createButtonTitle }}</div>
22
+          <div
23
+            v-show="!buttonCollapse"
24
+            class="button-line" />
25
+          <i
26
+            :class="createButtonIcon"
27
+            class="button-mark" />
28
+        </div>
29
+      </el-popover>
30
+    </div>
31
+    <el-scrollbar
32
+      :style="{'border-right-color': variables.menuBg, 'padding-top': createButtonTitle != '' ? '90px' : '40px'}"
33
+      wrap-class="scrollbar-wrapper">
34
+      <el-menu
35
+        :default-active="activeMenu"
36
+        :collapse="collapse"
37
+        :background-color="variables.menuBg"
38
+        :text-color="variables.menuText"
39
+        :active-text-color="variables.menuActiveText"
40
+        :style="{ paddingBottom: paddingBottom}"
41
+        mode="vertical"
42
+        class="el-menu-vertical"
43
+        @select="handleSelect">
44
+        <sidebar-item
45
+          v-for="(route, index) in items"
46
+          :key="`${route.path}${index}`"
47
+          :item="route"
48
+          :collapse="collapse"
49
+          :base-path="route.path"
50
+          :active-menu="activeMenu" />
51
+      </el-menu>
52
+    </el-scrollbar>
53
+    <slot name="bottom"/>
54
+    <div
55
+      :style="{ 'background-color':variables.menuBg }"
56
+      class="sidebar-bottom">
57
+      <div class="sidebar-bottom-content">
58
+        <div v-if="!collapse" class="copyright">
59
+          <img src="/favicon.ico" width="20px" >
60
+          <span>Power by 悟空</span>
61
+        </div>
62
+        <img
63
+          :style="{ 'right': buttonCollapse ? '3px' : '0' }"
64
+          :class="{ 'is-close': collapse }"
65
+          class="collapse-button"
66
+          src="@/assets/img/collapse_white.png"
67
+          alt=""
68
+          @click="toggleSideBarClick">
69
+      </div>
70
+    </div>
71
+  </div>
72
+</template>
73
+
74
+<script>
75
+import { mapGetters } from 'vuex'
76
+import SidebarItem from './SidebarItem'
77
+import variables from './variables.scss'
78
+
79
+export default {
80
+  components: { SidebarItem },
81
+  props: {
82
+    items: {
83
+      type: Array,
84
+      default: () => {
85
+        return []
86
+      }
87
+    },
88
+    addOffset: {
89
+      type: Number,
90
+      default: 70
91
+    },
92
+    createButtonTitle: {
93
+      type: String,
94
+      default: ''
95
+    },
96
+    createButtonIcon: {
97
+      type: String,
98
+      default: 'el-icon-plus'
99
+    },
100
+    // 防止菜单被底部布局遮住
101
+    paddingBottom: {
102
+      type: String,
103
+      default: '48px'
104
+    }
105
+  },
106
+  data() {
107
+    return {
108
+      buttonCollapse: false
109
+    }
110
+  },
111
+  computed: {
112
+    ...mapGetters(['collapse']),
113
+    activeMenu() {
114
+      const route = this.$route
115
+      const { meta, path, params } = route
116
+
117
+      let title = this.WKConfig.companyName
118
+      if (meta.title) {
119
+        title += ' - ' + meta.title
120
+      } else if (params && params.title) {
121
+        title += ' - ' + params.title
122
+      }
123
+      document.title = title
124
+      // if set path, the sidebar will highlight the path you set
125
+      if (meta.activeMenu) {
126
+        return meta.activeMenu
127
+      }
128
+      return path
129
+    },
130
+    variables() {
131
+      return variables
132
+    }
133
+  },
134
+  watch: {
135
+    collapse: function(val) {
136
+      if (val) {
137
+        this.buttonCollapse = val
138
+      } else {
139
+        setTimeout(() => {
140
+          this.buttonCollapse = val
141
+        }, 300)
142
+      }
143
+    }
144
+  },
145
+  mounted() {
146
+    this.buttonCollapse = this.collapse
147
+  },
148
+  methods: {
149
+    toggleSideBarClick() {
150
+      this.$store.commit('SET_COLLAPSE', !this.collapse)
151
+    },
152
+
153
+    // 快速创建
154
+    quicklyCreate() {
155
+      this.$emit('quicklyCreate')
156
+    },
157
+
158
+    handleSelect(key, keyPath) {
159
+      this.$emit('select', key, keyPath)
160
+    }
161
+  }
162
+}
163
+</script>
164
+<style lang="scss" scoped>
165
+@import './variables.scss';
166
+
167
+.sidebar-container {
168
+  transition: width 0.28s;
169
+  width: auto;
170
+  height: 100%;
171
+  position: relative;
172
+  background-color: $menuBg;
173
+  overflow: auto;
174
+  flex-shrink: 0;
175
+
176
+  .scrollbar-wrapper {
177
+    overflow-x: hidden !important;
178
+  }
179
+
180
+  .el-scrollbar {
181
+    height: 100%;
182
+  }
183
+
184
+  a {
185
+    display: inline-block;
186
+    width: 100%;
187
+    overflow: hidden;
188
+  }
189
+}
190
+
191
+.el-menu-vertical:not(.el-menu--collapse) {
192
+  width: 200px;
193
+  min-height: 400px;
194
+}
195
+
196
+.el-menu-vertical {
197
+  height: 100%;
198
+  overflow-y: auto;
199
+  overflow-y: overlay;
200
+  overflow-x: hidden;
201
+  padding-bottom: 48px;
202
+  border-right-color: $menuBg;
203
+}
204
+
205
+.el-menu-vertical.el-menu--collapse {
206
+  /deep/ .el-submenu__icon-arrow {
207
+    display: none;
208
+  }
209
+
210
+  /deep/ .el-submenu__title {
211
+    span {
212
+      display: none;
213
+    }
214
+  }
215
+}
216
+
217
+// 创建
218
+
219
+.create-button-container {
220
+  padding: 15px 14px;
221
+  color: white;
222
+  font-size: 14px;
223
+  cursor: pointer;
224
+  position: absolute;
225
+  top: 0;
226
+  left: 0;
227
+  right: 0;
228
+  z-index: 2;
229
+
230
+
231
+  .create-button {
232
+    display: flex;
233
+    align-items: center;
234
+    justify-content: center;
235
+    box-sizing: border-box;
236
+    padding: 0 15px;
237
+    height: 36px;
238
+    border-radius: $xr-border-radius-base;
239
+    background-color: rgba($color: #fff, $alpha: 0.1);
240
+    color: #999;
241
+
242
+    .button-name {
243
+      flex: 1;
244
+    }
245
+
246
+    .button-line {
247
+      height: 10px;
248
+      background-color: white;
249
+      width: 1px;
250
+      margin: 0 20px 0 10px;
251
+      opacity: 0.3;
252
+    }
253
+
254
+    .button-mark {
255
+      width: 12px;
256
+    }
257
+  }
258
+
259
+  .create-button:hover {
260
+    color: white !important;
261
+    background-color: $xr-color-primary !important;
262
+  }
263
+}
264
+
265
+// 底部按钮
266
+.sidebar-bottom {
267
+  position: absolute;
268
+  bottom: 0;
269
+  left: 0;
270
+  right: 0;
271
+  height: 48px;
272
+
273
+  &-content {
274
+    position: relative;
275
+    height: 48px;
276
+  }
277
+
278
+  .copyright {
279
+    color: white;
280
+    font-size: 12px;
281
+    height: 100%;
282
+    padding-left: 20px;
283
+    line-height: 3.5;
284
+    img,span {
285
+      vertical-align: middle;
286
+    }
287
+  }
288
+}
289
+
290
+.collapse-button {
291
+  position: absolute;
292
+  top: 0;
293
+  padding: 18px 20px;
294
+  cursor: pointer;
295
+}
296
+
297
+.collapse-button.is-close {
298
+  transform: rotate(180deg);
299
+}
300
+</style>
301
+

+ 7
- 6
src/views/login/component/LoginByWelcome.vue 查看文件

@@ -20,10 +20,10 @@
20 20
         <el-input
21 21
           ref="code"
22 22
           v-model.trim="form.code"
23
-          :maxlength="20"
24 23
           :class="{error: !validateRes.code}"
25 24
           placeholder="请输入您的序列号"
26
-          type="code"
25
+          type="textarea"
26
+          rows="5"
27 27
           @focus="focusKey = 'code'"
28 28
           @keyup.enter.native="debouncedHandleLogin"
29 29
           @blur="checkForm"/>
@@ -91,7 +91,7 @@ import { Loading } from 'element-ui'
91 91
 
92 92
 import Mixins from './Mixins'
93 93
 import { debounce } from 'throttle-debounce'
94
-import md5 from 'js-md5'
94
+// import md5 from 'js-md5'
95 95
 
96 96
 export default {
97 97
   name: 'LoginByWelcome',
@@ -119,7 +119,7 @@ export default {
119 119
         }
120 120
         return false
121 121
       }
122
-
122
+      /*
123 123
       const validateCode = () => {
124 124
         let num = ''
125 125
         if (this.form.username && this.form.username.length > 6) {
@@ -132,14 +132,15 @@ export default {
132 132
         }
133 133
         return num == this.form.code
134 134
       }
135
+      */
135 136
       const temp = {
136 137
         username: [
137 138
           { required: true, msg: '手机号不能为空' },
138 139
           { reg: /^1[1-9]\d{9}$/, msg: '请输入正确的手机号码' }
139 140
         ],
140 141
         code: [
141
-          { required: true, msg: '序列号不能为空' },
142
-          { validator: validateCode, msg: '请输入正确的序列号' }
142
+          { required: true, msg: '序列号不能为空' }/*,
143
+          { validator: validateCode, msg: '请输入正确的序列号' }*/
143 144
         ],
144 145
         password: [
145 146
           { required: true, msg: '初始化密码不能为空' },

+ 2
- 2
src/views/pm/components/AddProject.vue 查看文件

@@ -326,7 +326,7 @@ export default {
326 326
 
327 327
       if (this.coverImg.custom) {
328 328
         params.is_system_cover = 0
329
-        params.batchId = this.batchId
329
+        // params.batchId = this.batchId
330 330
         params.cover_url = this.coverImg.url
331 331
       } else {
332 332
         params.is_system_cover = 1
@@ -444,7 +444,7 @@ export default {
444 444
         .then(res => {
445 445
           this.projectRoleList = res.data || []
446 446
           if (this.projectRoleList.length) {
447
-            this.ownerRole = this.projectRoleList[0].id
447
+            this.ownerRole = this.ownerRole || this.projectRoleList[0].id
448 448
           }
449 449
           this.loading = false
450 450
         })

+ 4
- 4
src/views/pm/project/components/Board.js 查看文件

@@ -150,10 +150,10 @@ export default {
150 150
     getList() {
151 151
       const params = { work_id: this.workId }
152 152
       if (this.conditionData) {
153
-        params.mainUserId = this.conditionData.userIds
154
-        params.stopTimeType = this.conditionData.timeId
155
-        params.labelId = this.conditionData.tagIds
156
-        params.taskName = this.conditionData.search
153
+        params.main_user_id = this.conditionData.userIds
154
+        params.stop_time_type = this.conditionData.timeId
155
+        params.lable_id = this.conditionData.tagIds
156
+        params.search = this.conditionData.search
157 157
       }
158 158
 
159 159
       this.loading = true

+ 1
- 1
src/views/pm/tag/index.vue 查看文件

@@ -68,7 +68,7 @@
68 68
               class="wukong wukong-subproject"/>
69 69
             <span
70 70
               slot="title"
71
-              class="title">{{ item.name }}</span>
71
+              class="title">{{ item.work_name }}</span>
72 72
             <task-cell
73 73
               v-for="(taskItem, taskIndex) in item.list"
74 74
               :key="taskIndex"

+ 1
- 1
src/views/taskExamine/task/components/SubTask.vue 查看文件

@@ -149,7 +149,7 @@ export default {
149 149
       }
150 150
 
151 151
       if (this.xhUserData.length) {
152
-        if (this.xhUserData[0].userId != this.subData.mainUser.userId) {
152
+        if (this.xhUserData[0].id != this.subData.mainUser.id) {
153 153
           return true
154 154
         }
155 155
       }

+ 5
- 3
src/views/taskExamine/task/index.vue 查看文件

@@ -124,6 +124,7 @@ export default {
124 124
   props: {},
125 125
   data() {
126 126
     return {
127
+      first: true,
127 128
       tabsSelectValue: '0',
128 129
       // 任务类型 区分我的任务和下属任务
129 130
       taskType: '',
@@ -262,6 +263,7 @@ export default {
262 263
     },
263 264
 
264 265
     taskFilterSave(dueDate, priority, showDone, users) {
266
+      this.first = false
265 267
       this.priority = priority
266 268
       this.dueDate = dueDate
267 269
       this.showDone = showDone
@@ -280,7 +282,7 @@ export default {
280 282
         type: this.tabsSelectValue,
281 283
         priority: this.priority,
282 284
         dueDate: this.dueDate,
283
-        status: this.showDone ? '' : '1',
285
+        status: this.first ? '' : this.showDone ? '5' : '1',
284 286
         main_user_id: this.userList && this.userList.length ? this.userList[0].id : ''
285 287
       }
286 288
 
@@ -358,7 +360,7 @@ export default {
358 360
           type: this.tabsSelectValue,
359 361
           priority: this.priority,
360 362
           dueDate: this.dueDate,
361
-          status: this.showDone ? '' : '1'
363
+          status: this.first ? '' : this.showDone ? '5' : '1'
362 364
         }
363 365
 
364 366
         if (this.taskType != 1) {
@@ -395,7 +397,7 @@ export default {
395 397
         type: this.tabsSelectValue,
396 398
         priority: this.priority,
397 399
         dueDate: this.dueDate,
398
-        status: this.showDone ? '' : '1'
400
+        status: this.first ? '' : this.showDone ? '5' : '1'
399 401
       }
400 402
 
401 403
       if (this.taskType != 1) {

+ 8
- 8
src/views/workLog/components/LogDetail.vue 查看文件

@@ -51,7 +51,7 @@
51 51
 
52 52
           <picture-list-view
53 53
             v-if="detail.imgList.length !== 0"
54
-            :list="detail.img" />
54
+            :list="detail.imgList" />
55 55
 
56 56
           <flexbox v-if="detail.sendUserList && detail.sendUserList.length" class="send-list">
57 57
             <span class="send-list__label">发送给:</span>
@@ -74,11 +74,11 @@
74 74
             <div class="section__hd">
75 75
               <i class="wukong wukong-file" />
76 76
               <span>附件</span>
77
-              <span>({{ detail.file.length }})</span>
77
+              <span>({{ detail.fileList.length }})</span>
78 78
             </div>
79 79
             <div class="section__bd">
80 80
               <file-cell
81
-                v-for="(file, fileIndex) in detail.file"
81
+                v-for="(file, fileIndex) in detail.fileList"
82 82
                 :key="fileIndex"
83 83
                 :data="file"
84 84
                 :list="detail.file"
@@ -174,7 +174,7 @@
174 174
 import {
175 175
   journalQueryByIdAPI,
176 176
   journalQueryRecordCountAPI,
177
-  journalQueryBulletinByTypeAPI } from '@/api/oa/journal'
177
+  journalQueryBulletinByTypeAPI, journalQueryActivityCountAPI } from '@/api/oa/journal'
178 178
 import {
179 179
   queryCommentListAPI,
180 180
   setjournalCommentAPI
@@ -268,7 +268,7 @@ export default {
268 268
         placeholder: '',
269 269
         crmType: '',
270 270
         request: null,
271
-        recordRequest: journalQueryBulletinByTypeAPI,
271
+        recordRequest: journalQueryRecordCountAPI,
272 272
         params: null,
273 273
         paging: true,
274 274
         sortable: false
@@ -395,15 +395,15 @@ export default {
395 395
           this.fieldReportList = [
396 396
             {
397 397
               label: '模块',
398
-              prop: 'crmType',
398
+              prop: 'types',
399 399
               width: 300
400 400
             },
401 401
             {
402 402
               label: '新增跟进记录数',
403
-              prop: 'count'
403
+              prop: 'dataCount'
404 404
             }
405 405
           ]
406
-          this.reportData.request = journalQueryRecordCountAPI
406
+          this.reportData.request = journalQueryActivityCountAPI
407 407
           this.reportData.paging = false
408 408
           this.reportData.sortable = false
409 409
         } else {