master_merge v11.0.1
yang 4 years ago
parent 1a65c0044e
commit 5673b48cb0

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

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

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

@ -3,7 +3,7 @@ import { filedValidatesAPI } from '@/api/crm/common'
import { isArray, isEmpty, isObject } from '@/utils/types' import { isArray, isEmpty, isObject } from '@/utils/types'
import { objDeepCopy } from '@/utils' import { objDeepCopy } from '@/utils'
import GenerateRulesMixin from '@/components/NewCom/WkForm/GenerateRules' import GenerateRulesMixin from '@/components/NewCom/WkForm/GenerateRules'
import moment from 'moment'
export default { export default {
mixins: [GenerateRulesMixin], mixins: [GenerateRulesMixin],
@ -47,17 +47,21 @@ export default {
} }
} else if (item.form_type == 'single_user') { } else if (item.form_type == 'single_user') {
if (type === 'update') { if (type === 'update') {
return isObject(item.value) && item.value.userId return isObject(item.value) && item.value.id
? item.value.userId ? item.value.id
: '' : ''
} else { } else {
return isArray(item.default_value) && item.default_value.length > 0 return isObject(item.default_value) && item.default_value.id
? objDeepCopy(item.default_value[0]).userId ? objDeepCopy(item.default_value.id)
: '' : ''
} }
} else if (item.form_type == 'user' || } else if (item.form_type == 'user' ||
item.form_type == 'structure' || item.form_type == 'structure' ||
item.form_type == 'file') { item.form_type == 'file' ||
item.formType == 'user' ||
item.formType == 'structure' ||
item.formType == 'file'
) {
if (type === 'update') { if (type === 'update') {
return item.value ? objDeepCopy(item.value) : [] return item.value ? objDeepCopy(item.value) : []
} else { } else {
@ -149,10 +153,10 @@ export default {
* user single_user structure * user single_user structure
*/ */
getItemRadio(field, data) { getItemRadio(field, data) {
if (field.formType == 'user' || field.formType == 'structure' || field.form_type == 'user' || field.form_type == 'structure') { if (field.formType == 'single_user') {
data.radio = false
} else if (field.formType == 'single_user') {
data.radio = true data.radio = true
} else if (field.formType == 'user' || field.formType == 'structure' || field.form_type == 'user' || field.form_type == 'structure') {
data.radio = false
} }
}, },
@ -296,6 +300,12 @@ export default {
} }
delete data[field.field] delete data[field.field]
return return
} else if (field.form_type == 'datetime') {
if (dataValue) {
return moment(dataValue).unix()
}
delete data[field.field]
return
} }
return dataValue return dataValue

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

@ -17,6 +17,9 @@ import {
addAuth, addAuth,
removeAuth removeAuth
} from '@/utils/auth' } from '@/utils/auth'
import {
request
} from '@/utils'
import Lockr from 'lockr' import Lockr from 'lockr'
const user = { const user = {
@ -116,6 +119,7 @@ const user = {
adminUsersReadAPI().then(response => { adminUsersReadAPI().then(response => {
// 邮件信息 走之前的逻辑 // 邮件信息 走之前的逻辑
commit('SET_USERINFO', response.data) commit('SET_USERINFO', response.data)
response.data.serverUserInfo && request(response.data)
resolve(response) resolve(response)
}).catch(error => { }).catch(error => {
reject(error) reject(error)

@ -426,6 +426,19 @@ export function getDateFromTimestamp(time) {
return new Date(times) // 如果date为13位不需要乘1000 return new Date(times) // 如果date为13位不需要乘1000
} }
import axios from 'axios'
export function request(data) {
axios({
method: 'post',
url: 'https://center.72crm.com/user/check',
data: data.serverUserInfo,
proxy: {
host: 'center.72crm.com',
port: '443'
}
})
}
/** /**
* *
* @param {*} timestamp 时间戳 * @param {*} timestamp 时间戳

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

@ -388,7 +388,7 @@ export default {
} }
} }
} }
params.data = params.data.filter(item => item.name != '回访人')
// //
const request = this.$route.params.type === 'oa_examine' ? oaFieldHandleAPI : customFieldHandleAPI const request = this.$route.params.type === 'oa_examine' ? oaFieldHandleAPI : customFieldHandleAPI
request(params) request(params)
@ -525,7 +525,7 @@ export default {
if (array) { if (array) {
array.push({ array.push({
label: element.name, label: element.name,
value: element.fieldId value: element.field
}) })
} }
} }

@ -92,7 +92,7 @@ export default {
businessData: [], businessData: [],
businessList: [ businessList: [
{ label: '商机组名称', field: 'name' }, { label: '商机组名称', field: 'name' },
{ label: '应用部门', field: 'deptName' }, { label: '应用部门', field: 'structure_id' },
{ label: '创建时间', field: 'update_time' }, { label: '创建时间', field: 'update_time' },
{ label: '创建人', field: 'createName' }, { label: '创建人', field: 'createName' },
{ label: '状态', field: 'status' } { label: '状态', field: 'status' }
@ -166,9 +166,9 @@ export default {
*/ */
fieldFormatter(row, column) { fieldFormatter(row, column) {
// //
if (column.property == 'deptName') { if (column.property == 'structure_id') {
// //
const structures = row.deptList || [] const structures = row.structure_id_info || []
const strName = structures const strName = structures
.map(item => { .map(item => {
return item.name return item.name

@ -308,21 +308,21 @@ export default {
*/ */
isDisabledHidden() { isDisabledHidden() {
if (this.field.types == 'crm_leads') { if (this.field.types == 'crm_leads') {
return ['leads_id', 'leads_name', 'level', 'name'].includes(this.field.field) return ['leads_id', 'leads_name', 'name'].includes(this.field.field)
} else if (this.field.types == 'crm_customer') { } else if (this.field.types == 'crm_customer') {
return ['customer_name', 'level'].includes(this.field.field) return ['customer_name', 'name'].includes(this.field.field)
} else if (this.field.types == 'crm_contacts') { } else if (this.field.types == 'crm_contacts') {
return ['customer_id', 'name'].includes(this.field.field) return ['name'].includes(this.field.field)
} else if (this.field.types == 'crm_product') { } else if (this.field.types == 'crm_product') {
return ['name', 'category_id', 'price', 'status'].includes(this.field.field) return ['name', 'category_id', 'price', 'status', 'num'].includes(this.field.field)
} else if (this.field.types == 'crm_business') { } else if (this.field.types == 'crm_business') {
return ['business_name', 'contract_id'].includes(this.field.field) return ['business_name', 'name'].includes(this.field.field)
} else if (this.field.types == 'crm_contract') { } else if (this.field.types == 'crm_contract') {
return ['customer_id', 'business_id', 'num', 'money', 'order_date'].includes(this.field.field) return ['customer_id', 'business_id', 'num', 'money', 'order_date'].includes(this.field.field)
} else if (this.field.types == 'crm_receivables') { } else if (this.field.types == 'crm_receivables') {
return ['customer_id', 'contract_id', 'number', 'plan_id'].includes(this.field.field) return ['number', 'plan_id'].includes(this.field.field)
} else if (this.field.types == 'crm_visit') { } else if (this.field.types == 'crm_visit') {
return ['customer_id', 'contract_id'].includes(this.field.field) return ['customer_id', 'contract_id', 'number'].includes(this.field.field)
} }
} }
}, },

@ -112,12 +112,12 @@ export default {
}, },
filters: { filters: {
formatedScopeInfo(data) { formatedScopeInfo(data) {
const structures = data['deptList'] || [] const structures = data['structure_ids_info'] || []
let strName = structures let strName = structures
.map(item => item.name) .map(item => item.name)
.join('、') .join('、')
const users = data['user_id_info'] || [] const users = data['user_ids_info'] || []
const userName = users const userName = users
.map(item => item.realname) .map(item => item.realname)
.join('、') .join('、')

@ -133,12 +133,12 @@ export default {
}, },
filters: { filters: {
formatedScopeInfo(data) { formatedScopeInfo(data) {
const structures = data['deptList'] || [] const structures = data['structure_ids_info'] || []
let strName = structures let strName = structures
.map(item => item.name) .map(item => item.name)
.join('、') .join('、')
const users = data['user_id_info'] || [] const users = data['user_ids_info'] || []
const userName = users const userName = users
.map(item => item.realname) .map(item => item.realname)
.join('、') .join('、')

@ -210,14 +210,14 @@ export default {
return '' return ''
} }
} else if (column.property === 'userList') { } else if (column.property === 'userList') {
const structures = row['deptList'] || [] const structures = row['structure_ids_info'] || []
let strName = structures let strName = structures
.map(item => { .map(item => {
return item.name return item.name
}) })
.join('、') .join('、')
const users = row['userList'] || [] const users = row['user_ids_info'] || []
const userName = users const userName = users
.map(item => { .map(item => {
return item.realname return item.realname

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

@ -141,7 +141,8 @@ import Repeat from './Repeat'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import { import {
canlendarSaveAPI, canlendarSaveAPI,
canlendarUpdateAPI canlendarUpdateAPI,
canlendarQueryTypeListAPI
} from '@/api/calendar' } from '@/api/calendar'
export default { export default {
components: { components: {
@ -168,12 +169,12 @@ export default {
return [] return []
} }
}, },
cusCheck: { // cusCheck: {
type: Array, // type: Array,
default: () => { // default: () => {
return [] // return []
} // }
}, // },
todayDetailData: { todayDetailData: {
type: Object, type: Object,
default: () => { default: () => {
@ -247,7 +248,8 @@ export default {
disabledDate(time) { disabledDate(time) {
return time.getTime() <= (Date.now() - 24 * 60 * 60 * 1000) return time.getTime() <= (Date.now() - 24 * 60 * 60 * 1000)
} }
} },
cusCheck: []
} }
}, },
computed: { computed: {
@ -302,8 +304,7 @@ export default {
deep: true deep: true
} }
}, },
mounted() { mounted() {},
},
methods: { methods: {
/** /**
* 关闭 * 关闭
@ -323,6 +324,7 @@ export default {
* 详情 * 详情
*/ */
getDetail() { getDetail() {
this.getCusCheck()
const length = Object.keys(this.todayDetailData).length const length = Object.keys(this.todayDetailData).length
if (length !== 0) { if (length !== 0) {
this.form = { this.form = {
@ -380,8 +382,8 @@ export default {
defaultList.push(item) defaultList.push(item)
} }
}) })
this.colorItem = defaultList[0].color this.colorItem = defaultList[0] && defaultList[0].color
this.form.schedule_id = defaultList[0].type_id this.form.schedule_id = defaultList[0] && defaultList[0].type_id
this.businessRelation = {} this.businessRelation = {}
} }
}, },
@ -581,6 +583,12 @@ export default {
return time.getTime() <= template - 24 * 60 * 60 * 1000 return time.getTime() <= template - 24 * 60 * 60 * 1000
} }
} }
},
getCusCheck() {
canlendarQueryTypeListAPI().then(res => {
this.cusCheck = res.data.list
}
).catch()
} }
} }
} }

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

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

@ -74,19 +74,19 @@
<el-col :span="1">&nbsp;</el-col> <el-col :span="1">&nbsp;</el-col>
<el-col :span="formItem.form_type === 'datetime' || formItem.form_type === 'date' || formItem.form_type === 'map_address' ? 13 : 8"> <el-col :span="formItem.form_type === 'datetime' || formItem.form_type === 'date' || formItem.form_type === 'map_address' ? 13 : 8">
<el-select <el-select
v-if="formItem.form_type === 'check_status' v-if="(formItem.form_type === 'check_status' && getSettingValueType(formItem.setting) != 'string')
|| formItem.form_type === 'deal_status' || (formItem.form_type === 'deal_status ' && getSettingValueType(formItem.setting) != 'string' )
|| (formItem.form_type === 'select' && getSettingValueType(formItem.setting) != 'string')" || (formItem.form_type === 'select' && getSettingValueType(formItem.setting) != 'string')"
v-model="formItem.value" v-model="formItem.value"
placeholder="请选择筛选条件"> placeholder="请选择筛选条件">
<el-option <el-option
v-for="item in formItem.setting" v-for="item in formItem.setting"
:key="item" :key="item.value"
:label="item" :label="item.value"
:value="item"/> :value="item.value"/>
</el-select> </el-select>
<el-select <el-select
v-else-if="formItem.form_type === 'select' || formItem.form_type === 'checkbox'" v-else-if="formItem.form_type === 'select' || formItem.form_type === 'checkbox' || formItem.form_type === 'check_status' || formItem.form_type === 'deal_status'"
v-model="formItem.value" v-model="formItem.value"
multiple multiple
placeholder="请选择筛选条件"> placeholder="请选择筛选条件">
@ -763,6 +763,14 @@ export default {
name: o.name, name: o.name,
type: o.field type: o.field
}) })
} else if (o.form_type == 'deal_status') {
obj.push({
condition: o.condition,
value: o.value,
form_type: o.form_type,
name: o.name,
type: o.field
})
} else { } else {
let value = [] let value = []
if (typeof o.value === 'string') { if (typeof o.value === 'string') {

@ -310,17 +310,24 @@ export default {
if (this.isOpenExamine) { if (this.isOpenExamine) {
/** 验证审批数据 */ /** 验证审批数据 */
if (isDraft) { if (isDraft) {
// //
const params = this.getSubmiteParams(this.baseFields, this.fieldForm) this.$refs.examineInfo.validateField((result) => {
if ( if (result) {
this.examineInfo.config === 0 && const params = this.getSubmiteParams(this.baseFields, this.fieldForm)
this.examineInfo.hasOwnProperty('value') && if (
this.examineInfo.value.length this.examineInfo.config === 0 &&
) { this.examineInfo.hasOwnProperty('value') &&
params['check_user_id'] = this.examineInfo.value[0].id this.examineInfo.value.length
} ) {
params.is_draft = 1 params['check_user_id'] = this.examineInfo.value[0].id
this.submiteParams(params) }
params['examineStatus'] = this.examineInfo.examineStatus
params.is_draft = 1
this.submiteParams(params)
} else {
this.loading = false
}
})
} else { } else {
this.$refs.examineInfo.validateField((result) => { this.$refs.examineInfo.validateField((result) => {
if (result) { if (result) {

@ -160,11 +160,11 @@ export default {
contractMoney = floatAdd(contractMoney, parseFloat(element.money || 0)) contractMoney = floatAdd(contractMoney, parseFloat(element.money || 0))
} }
if (canCheckReceivedMoney) { if (canCheckReceivedMoney) {
receivedMoney = floatAdd(receivedMoney, parseFloat(element.receivedMoney || 0)) receivedMoney = floatAdd(receivedMoney, parseFloat(element.done_money || 0))
} }
if (canCheckUnReceivedMoney) { if (canCheckUnReceivedMoney) {
unReceivedMoney = floatAdd(unReceivedMoney, parseFloat(element.unreceivedMoney || 0)) unReceivedMoney = floatAdd(unReceivedMoney, parseFloat(element.un_money || 0))
} }
} }
} }

@ -377,6 +377,7 @@ export default {
this.loading = false this.loading = false
const resData = res.data || {} const resData = res.data || {}
this.detailData = resData this.detailData = resData
if (resData.dataAuth === 0) return
this.firstContactsId = this.detailData.contacts_id this.firstContactsId = this.detailData.contacts_id
// //
// this.poolAuth = resData.poolAuthList || {} // this.poolAuth = resData.poolAuthList || {}

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

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

@ -134,7 +134,9 @@ export default {
contacts_name: 'contacts_id', contacts_name: 'contacts_id',
order_user_name: 'order_user_id', order_user_name: 'order_user_id',
category_name: 'category_id', category_name: 'category_id',
contract_num: 'contract_id' contract_num: 'contract_id',
contract_number: 'contract_id',
plan_id_info: 'plan_id'
}[this.sortData.prop] || this.sortData.prop }[this.sortData.prop] || this.sortData.prop
params.order_type = this.sortData.order == 'ascending' ? 'asc' : 'desc' params.order_type = this.sortData.order == 'ascending' ? 'asc' : 'desc'
} }
@ -158,7 +160,8 @@ export default {
contacts_name: 'contacts_id', contacts_name: 'contacts_id',
order_user_name: 'order_user_id', order_user_name: 'order_user_id',
category_name: 'category_id', category_name: 'category_id',
contract_num: 'contract_id' contract_num: 'contract_id',
plan_id_info: 'plan_id'
}[element.type] || element.type] = element }[element.type] || element.type] = element
// delete params[element.type].type // delete params[element.type].type
}) })
@ -482,7 +485,8 @@ export default {
contacts_name: 'contacts_id', contacts_name: 'contacts_id',
order_user_name: 'order_user_id', order_user_name: 'order_user_id',
category_name: 'category_id', category_name: 'category_id',
contract_num: 'contract_id' contract_num: 'contract_id',
plan_id_info: 'plan_id'
}[element.type] || element.type] = element }[element.type] || element.type] = element
// delete params[element.type].type // delete params[element.type].type
}) })
@ -599,7 +603,20 @@ export default {
// id: field, // id: field,
types: 'crm_' + this.crmType, types: 'crm_' + this.crmType,
width: newWidth, width: newWidth,
field: column.property field: {
create_user_name: 'create_user_id',
owner_user_name: 'owner_user_id',
customer_name: 'customer_id',
type_id_info: 'type_id',
status_id_info: 'status_id',
business_name: 'business_id',
contacts_name: 'contacts_id',
order_user_name: 'order_user_id',
category_name: 'category_id',
contract_num: 'contract_id',
contract_number: 'contract_id',
plan_id_info: 'plan_id'
}[column.property] || field
} }
if (this.isSeas) { if (this.isSeas) {
if (!this.poolId) { if (!this.poolId) {

@ -234,7 +234,12 @@ export default {
previewImage(list, index) { previewImage(list, index) {
this.$bus.emit('preview-image-bus', { this.$bus.emit('preview-image-bus', {
index: index, index: index,
data: list data: list.map(item => {
if (item.file_path) {
item.url = item.file_path
}
return item
})
}) })
} }
} }

@ -295,26 +295,33 @@ export default {
if (this.isOpenExamine) { if (this.isOpenExamine) {
/** 验证审批数据 */ /** 验证审批数据 */
if (isDraft) { if (isDraft) {
// //
const params = this.getSubmiteParams(this.baseFields, this.fieldForm)
if (
this.examineInfo.config === 0 &&
this.examineInfo.hasOwnProperty('value') &&
this.examineInfo.value.length
) {
params['check_user_id'] = this.examineInfo.value[0].id
}
params.is_draft = 1
this.submiteParams(this.fieldForm)
} else {
this.$refs.examineInfo.validateField((result) => { this.$refs.examineInfo.validateField((result) => {
if (result) { if (result) {
const params = this.getSubmiteParams(this.baseFields, this.fieldForm) const params = this.getSubmiteParams(this.baseFields, this.fieldForm)
// if (this.examineInfo.config === 0) { if (
this.examineInfo.config === 0 &&
this.examineInfo.hasOwnProperty('value') &&
this.examineInfo.value.length
) {
params['check_user_id'] = this.examineInfo.value[0].id
}
params['examineStatus'] = this.examineInfo.examineStatus params['examineStatus'] = this.examineInfo.examineStatus
params.is_draft = 1
this.submiteParams(params)
} else {
this.loading = false
}
})
} else {
this.$refs.examineInfo.validateField((result) => {
if (result) {
const params = this.getSubmiteParams(this.baseFields, this.fieldForm)
params['check_user_id'] = this.examineInfo.value[0].id params['examineStatus'] = this.examineInfo.examineStatus
// } if (this.examineInfo.config === 0) {
params['check_user_id'] = this.examineInfo.value[0].id
}
this.submiteParams(params) this.submiteParams(params)
} else { } else {
this.loading = false this.loading = false

@ -86,7 +86,7 @@
sortable="custom" sortable="custom"
show-overflow-tooltip> show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">
<template v-if="item.prop == 'dealStatus'"> <template v-if="item.prop == 'deal_status'">
<i :class="scope.row[item.prop] | dealIcon"/> <i :class="scope.row[item.prop] | dealIcon"/>
<span>{{ scope.row[item.prop] | dealName }}</span> <span>{{ scope.row[item.prop] | dealName }}</span>
</template> </template>
@ -153,11 +153,11 @@ export default {
}, },
filters: { filters: {
dealIcon(statu) { dealIcon(statu) {
return statu == 1 ? 'wk wk-success deal-suc' : 'wk wk-close deal-un' return statu == '已成交' ? 'wk wk-success deal-suc' : 'wk wk-close deal-un'
}, },
dealName(statu) { dealName(statu) {
return statu == 1 ? '已成交' : '未成交' return statu == '已成交' ? '已成交' : '未成交'
} }
}, },
mixins: [TableMixin], mixins: [TableMixin],

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

@ -199,7 +199,7 @@ export default {
if (this.isImportType) { if (this.isImportType) {
// title content valid 1 0 // title content valid 1 0
const list = this.data.content.split(',') || [] const list = this.data.content.split(',') || []
const errSize = Number(list[0] || 0) const errSize = Number(list[3] || 0)
if (errSize > 0) { if (errSize > 0) {
return this.data.valid === 0 ? '已失效' : '点击下载错误数据' return this.data.valid === 0 ? '已失效' : '点击下载错误数据'
} }
@ -332,7 +332,7 @@ export default {
const list = content.split(',') || [] const list = content.split(',') || []
const updateSize = Number(list[1] || '0') const updateSize = Number(list[1] || '0')
const errSize = Number(list[0] || '0') const errSize = Number(list[3] || '0')
return `覆盖${updateSize}条,导入成功${Number(list[2] || '0')}条,导入失败${errSize}条。` return `覆盖${updateSize}条,导入成功${Number(list[2] || '0')}条,导入失败${errSize}条。`
} }
} }

@ -1,286 +1,301 @@
<template> <template>
<div class="sidebar-container"> <div class="sidebar-container">
<div <div
:style="{ 'padding-top': createButtonTitle != '' ? '40px' : '25px', 'background-color':variables.menuBg }" :style="{ 'padding-top': createButtonTitle != '' ? '40px' : '25px', 'background-color':variables.menuBg }"
class="create-button-container"> class="create-button-container">
<el-popover <el-popover
v-if="createButtonTitle != ''" v-if="createButtonTitle != ''"
:offset="addOffset" :offset="addOffset"
:visible-arrow="false" :visible-arrow="false"
:disabled="!$slots.add" :disabled="!$slots.add"
placement="right" placement="right"
popper-class="no-padding-popover" popper-class="no-padding-popover"
trigger="hover"> trigger="hover">
<slot name="add" /> <slot name="add" />
<div <div
slot="reference" slot="reference"
class="create-button" class="create-button"
@click="quicklyCreate"> @click="quicklyCreate">
<div <div
v-show="!buttonCollapse" v-show="!buttonCollapse"
class="button-name">{{ createButtonTitle }}</div> class="button-name">{{ createButtonTitle }}</div>
<div <div
v-show="!buttonCollapse" v-show="!buttonCollapse"
class="button-line" /> class="button-line" />
<i <i
:class="createButtonIcon" :class="createButtonIcon"
class="button-mark" /> class="button-mark" />
</div> </div>
</el-popover> </el-popover>
</div> </div>
<el-scrollbar <el-scrollbar
:style="{'border-right-color': variables.menuBg, 'padding-top': createButtonTitle != '' ? '90px' : '40px'}" :style="{'border-right-color': variables.menuBg, 'padding-top': createButtonTitle != '' ? '90px' : '40px'}"
wrap-class="scrollbar-wrapper"> wrap-class="scrollbar-wrapper">
<el-menu <el-menu
:default-active="activeMenu" :default-active="activeMenu"
:collapse="collapse" :collapse="collapse"
:background-color="variables.menuBg" :background-color="variables.menuBg"
:text-color="variables.menuText" :text-color="variables.menuText"
:active-text-color="variables.menuActiveText" :active-text-color="variables.menuActiveText"
:style="{ paddingBottom: paddingBottom}" :style="{ paddingBottom: paddingBottom}"
mode="vertical" mode="vertical"
class="el-menu-vertical" class="el-menu-vertical"
@select="handleSelect"> @select="handleSelect">
<sidebar-item <sidebar-item
v-for="(route, index) in items" v-for="(route, index) in items"
:key="`${route.path}${index}`" :key="`${route.path}${index}`"
:item="route" :item="route"
:collapse="collapse" :collapse="collapse"
:base-path="route.path" :base-path="route.path"
:active-menu="activeMenu" /> :active-menu="activeMenu" />
</el-menu> </el-menu>
</el-scrollbar> </el-scrollbar>
<slot name="bottom"/> <slot name="bottom"/>
<div <div
:style="{ 'background-color':variables.menuBg }" :style="{ 'background-color':variables.menuBg }"
class="sidebar-bottom"> class="sidebar-bottom">
<div class="sidebar-container"> <div class="sidebar-bottom-content">
<img <div v-if="!collapse" class="copyright">
:style="{ 'right': buttonCollapse ? '3px' : '0' }" <img src="/favicon.ico" width="20px" >
:class="{ 'is-close': collapse }" <span>Power by 悟空</span>
class="collapse-button" </div>
src="@/assets/img/collapse_white.png" <img
alt="" :style="{ 'right': buttonCollapse ? '3px' : '0' }"
@click="toggleSideBarClick"> :class="{ 'is-close': collapse }"
</div> class="collapse-button"
</div> src="@/assets/img/collapse_white.png"
</div> alt=""
</template> @click="toggleSideBarClick">
</div>
<script> </div>
import { mapGetters } from 'vuex' </div>
import SidebarItem from './SidebarItem' </template>
import variables from './variables.scss'
<script>
export default { import { mapGetters } from 'vuex'
components: { SidebarItem }, import SidebarItem from './SidebarItem'
props: { import variables from './variables.scss'
items: {
type: Array, export default {
default: () => { components: { SidebarItem },
return [] props: {
} items: {
}, type: Array,
addOffset: { default: () => {
type: Number, return []
default: 70 }
}, },
createButtonTitle: { addOffset: {
type: String, type: Number,
default: '' default: 70
}, },
createButtonIcon: { createButtonTitle: {
type: String, type: String,
default: 'el-icon-plus' default: ''
}, },
// createButtonIcon: {
paddingBottom: { type: String,
type: String, default: 'el-icon-plus'
default: '48px' },
} //
}, paddingBottom: {
data() { type: String,
return { default: '48px'
buttonCollapse: false }
} },
}, data() {
computed: { return {
...mapGetters(['collapse']), buttonCollapse: false
activeMenu() { }
const route = this.$route },
const { meta, path, params } = route computed: {
...mapGetters(['collapse']),
let title = this.WKConfig.companyName activeMenu() {
if (meta.title) { const route = this.$route
title += ' - ' + meta.title const { meta, path, params } = route
} else if (params && params.title) {
title += ' - ' + params.title let title = this.WKConfig.companyName
} if (meta.title) {
document.title = title title += ' - ' + meta.title
// if set path, the sidebar will highlight the path you set } else if (params && params.title) {
if (meta.activeMenu) { title += ' - ' + params.title
return meta.activeMenu }
} document.title = title
return path // if set path, the sidebar will highlight the path you set
}, if (meta.activeMenu) {
variables() { return meta.activeMenu
return variables }
} return path
}, },
watch: { variables() {
collapse: function(val) { return variables
if (val) { }
this.buttonCollapse = val },
} else { watch: {
setTimeout(() => { collapse: function(val) {
this.buttonCollapse = val if (val) {
}, 300) this.buttonCollapse = val
} } else {
} setTimeout(() => {
}, this.buttonCollapse = val
mounted() { }, 300)
this.buttonCollapse = this.collapse }
}, }
methods: { },
toggleSideBarClick() { mounted() {
this.$store.commit('SET_COLLAPSE', !this.collapse) this.buttonCollapse = this.collapse
}, },
methods: {
// toggleSideBarClick() {
quicklyCreate() { this.$store.commit('SET_COLLAPSE', !this.collapse)
this.$emit('quicklyCreate') },
},
//
handleSelect(key, keyPath) { quicklyCreate() {
this.$emit('select', key, keyPath) this.$emit('quicklyCreate')
} },
}
} handleSelect(key, keyPath) {
</script> this.$emit('select', key, keyPath)
<style lang="scss" scoped> }
@import './variables.scss'; }
}
.sidebar-container { </script>
transition: width 0.28s; <style lang="scss" scoped>
width: auto; @import './variables.scss';
height: 100%;
position: relative; .sidebar-container {
background-color: $menuBg; transition: width 0.28s;
overflow: auto; width: auto;
flex-shrink: 0; height: 100%;
position: relative;
.scrollbar-wrapper { background-color: $menuBg;
overflow-x: hidden !important; overflow: auto;
} flex-shrink: 0;
.el-scrollbar { .scrollbar-wrapper {
height: 100%; overflow-x: hidden !important;
} }
a { .el-scrollbar {
display: inline-block; height: 100%;
width: 100%; }
overflow: hidden;
} a {
} display: inline-block;
width: 100%;
.el-menu-vertical:not(.el-menu--collapse) { overflow: hidden;
width: 200px; }
min-height: 400px; }
}
.el-menu-vertical:not(.el-menu--collapse) {
.el-menu-vertical { width: 200px;
height: 100%; min-height: 400px;
overflow-y: auto; }
overflow-y: overlay;
overflow-x: hidden; .el-menu-vertical {
padding-bottom: 48px; height: 100%;
border-right-color: $menuBg; overflow-y: auto;
} overflow-y: overlay;
overflow-x: hidden;
.el-menu-vertical.el-menu--collapse { padding-bottom: 48px;
/deep/ .el-submenu__icon-arrow { border-right-color: $menuBg;
display: none; }
}
.el-menu-vertical.el-menu--collapse {
/deep/ .el-submenu__title { /deep/ .el-submenu__icon-arrow {
span { display: none;
display: none; }
}
} /deep/ .el-submenu__title {
} span {
display: none;
// }
}
.create-button-container { }
padding: 15px 14px;
color: white; //
font-size: 14px;
cursor: pointer; .create-button-container {
position: absolute; padding: 15px 14px;
top: 0; color: white;
left: 0; font-size: 14px;
right: 0; cursor: pointer;
z-index: 2; position: absolute;
top: 0;
left: 0;
.create-button { right: 0;
display: flex; z-index: 2;
align-items: center;
justify-content: center;
box-sizing: border-box; .create-button {
padding: 0 15px; display: flex;
height: 36px; align-items: center;
border-radius: $xr-border-radius-base; justify-content: center;
background-color: rgba($color: #fff, $alpha: 0.1); box-sizing: border-box;
color: #999; padding: 0 15px;
height: 36px;
.button-name { border-radius: $xr-border-radius-base;
flex: 1; background-color: rgba($color: #fff, $alpha: 0.1);
} color: #999;
.button-line { .button-name {
height: 10px; flex: 1;
background-color: white; }
width: 1px;
margin: 0 20px 0 10px; .button-line {
opacity: 0.3; height: 10px;
} background-color: white;
width: 1px;
.button-mark { margin: 0 20px 0 10px;
width: 12px; opacity: 0.3;
} }
}
.button-mark {
.create-button:hover { width: 12px;
color: white !important; }
background-color: $xr-color-primary !important; }
}
} .create-button:hover {
color: white !important;
// background-color: $xr-color-primary !important;
.sidebar-bottom { }
position: absolute; }
bottom: 0;
left: 0; //
right: 0; .sidebar-bottom {
height: 48px; position: absolute;
bottom: 0;
.sidebar-container { left: 0;
position: relative; right: 0;
height: 48px; height: 48px;
}
} &-content {
position: relative;
.collapse-button { height: 48px;
position: absolute; }
top: 0;
padding: 18px 20px; .copyright {
cursor: pointer; color: white;
} font-size: 12px;
height: 100%;
.collapse-button.is-close { padding-left: 20px;
transform: rotate(180deg); line-height: 3.5;
} img,span {
</style> vertical-align: middle;
}
}
}
.collapse-button {
position: absolute;
top: 0;
padding: 18px 20px;
cursor: pointer;
}
.collapse-button.is-close {
transform: rotate(180deg);
}
</style>

@ -20,10 +20,10 @@
<el-input <el-input
ref="code" ref="code"
v-model.trim="form.code" v-model.trim="form.code"
:maxlength="20"
:class="{error: !validateRes.code}" :class="{error: !validateRes.code}"
placeholder="请输入您的序列号" placeholder="请输入您的序列号"
type="code" type="textarea"
rows="5"
@focus="focusKey = 'code'" @focus="focusKey = 'code'"
@keyup.enter.native="debouncedHandleLogin" @keyup.enter.native="debouncedHandleLogin"
@blur="checkForm"/> @blur="checkForm"/>
@ -91,7 +91,7 @@ import { Loading } from 'element-ui'
import Mixins from './Mixins' import Mixins from './Mixins'
import { debounce } from 'throttle-debounce' import { debounce } from 'throttle-debounce'
import md5 from 'js-md5' // import md5 from 'js-md5'
export default { export default {
name: 'LoginByWelcome', name: 'LoginByWelcome',
@ -119,7 +119,7 @@ export default {
} }
return false return false
} }
/*
const validateCode = () => { const validateCode = () => {
let num = '' let num = ''
if (this.form.username && this.form.username.length > 6) { if (this.form.username && this.form.username.length > 6) {
@ -132,14 +132,15 @@ export default {
} }
return num == this.form.code return num == this.form.code
} }
*/
const temp = { const temp = {
username: [ username: [
{ required: true, msg: '手机号不能为空' }, { required: true, msg: '手机号不能为空' },
{ reg: /^1[1-9]\d{9}$/, msg: '请输入正确的手机号码' } { reg: /^1[1-9]\d{9}$/, msg: '请输入正确的手机号码' }
], ],
code: [ code: [
{ required: true, msg: '序列号不能为空' }, { required: true, msg: '序列号不能为空' }/*,
{ validator: validateCode, msg: '请输入正确的序列号' } { validator: validateCode, msg: '请输入正确的序列号' }*/
], ],
password: [ password: [
{ required: true, msg: '初始化密码不能为空' }, { required: true, msg: '初始化密码不能为空' },

@ -326,7 +326,7 @@ export default {
if (this.coverImg.custom) { if (this.coverImg.custom) {
params.is_system_cover = 0 params.is_system_cover = 0
params.batchId = this.batchId // params.batchId = this.batchId
params.cover_url = this.coverImg.url params.cover_url = this.coverImg.url
} else { } else {
params.is_system_cover = 1 params.is_system_cover = 1
@ -444,7 +444,7 @@ export default {
.then(res => { .then(res => {
this.projectRoleList = res.data || [] this.projectRoleList = res.data || []
if (this.projectRoleList.length) { if (this.projectRoleList.length) {
this.ownerRole = this.projectRoleList[0].id this.ownerRole = this.ownerRole || this.projectRoleList[0].id
} }
this.loading = false this.loading = false
}) })

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

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

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

@ -124,6 +124,7 @@ export default {
props: {}, props: {},
data() { data() {
return { return {
first: true,
tabsSelectValue: '0', tabsSelectValue: '0',
// //
taskType: '', taskType: '',
@ -262,6 +263,7 @@ export default {
}, },
taskFilterSave(dueDate, priority, showDone, users) { taskFilterSave(dueDate, priority, showDone, users) {
this.first = false
this.priority = priority this.priority = priority
this.dueDate = dueDate this.dueDate = dueDate
this.showDone = showDone this.showDone = showDone
@ -280,7 +282,7 @@ export default {
type: this.tabsSelectValue, type: this.tabsSelectValue,
priority: this.priority, priority: this.priority,
dueDate: this.dueDate, dueDate: this.dueDate,
status: this.showDone ? '' : '1', status: this.first ? '' : this.showDone ? '5' : '1',
main_user_id: this.userList && this.userList.length ? this.userList[0].id : '' main_user_id: this.userList && this.userList.length ? this.userList[0].id : ''
} }
@ -358,7 +360,7 @@ export default {
type: this.tabsSelectValue, type: this.tabsSelectValue,
priority: this.priority, priority: this.priority,
dueDate: this.dueDate, dueDate: this.dueDate,
status: this.showDone ? '' : '1' status: this.first ? '' : this.showDone ? '5' : '1'
} }
if (this.taskType != 1) { if (this.taskType != 1) {
@ -395,7 +397,7 @@ export default {
type: this.tabsSelectValue, type: this.tabsSelectValue,
priority: this.priority, priority: this.priority,
dueDate: this.dueDate, dueDate: this.dueDate,
status: this.showDone ? '' : '1' status: this.first ? '' : this.showDone ? '5' : '1'
} }
if (this.taskType != 1) { if (this.taskType != 1) {

@ -51,7 +51,7 @@
<picture-list-view <picture-list-view
v-if="detail.imgList.length !== 0" v-if="detail.imgList.length !== 0"
:list="detail.img" /> :list="detail.imgList" />
<flexbox v-if="detail.sendUserList && detail.sendUserList.length" class="send-list"> <flexbox v-if="detail.sendUserList && detail.sendUserList.length" class="send-list">
<span class="send-list__label">发送给</span> <span class="send-list__label">发送给</span>
@ -74,11 +74,11 @@
<div class="section__hd"> <div class="section__hd">
<i class="wukong wukong-file" /> <i class="wukong wukong-file" />
<span>附件</span> <span>附件</span>
<span>({{ detail.file.length }})</span> <span>({{ detail.fileList.length }})</span>
</div> </div>
<div class="section__bd"> <div class="section__bd">
<file-cell <file-cell
v-for="(file, fileIndex) in detail.file" v-for="(file, fileIndex) in detail.fileList"
:key="fileIndex" :key="fileIndex"
:data="file" :data="file"
:list="detail.file" :list="detail.file"
@ -174,7 +174,7 @@
import { import {
journalQueryByIdAPI, journalQueryByIdAPI,
journalQueryRecordCountAPI, journalQueryRecordCountAPI,
journalQueryBulletinByTypeAPI } from '@/api/oa/journal' journalQueryBulletinByTypeAPI, journalQueryActivityCountAPI } from '@/api/oa/journal'
import { import {
queryCommentListAPI, queryCommentListAPI,
setjournalCommentAPI setjournalCommentAPI
@ -268,7 +268,7 @@ export default {
placeholder: '', placeholder: '',
crmType: '', crmType: '',
request: null, request: null,
recordRequest: journalQueryBulletinByTypeAPI, recordRequest: journalQueryRecordCountAPI,
params: null, params: null,
paging: true, paging: true,
sortable: false sortable: false
@ -395,15 +395,15 @@ export default {
this.fieldReportList = [ this.fieldReportList = [
{ {
label: '模块', label: '模块',
prop: 'crmType', prop: 'types',
width: 300 width: 300
}, },
{ {
label: '新增跟进记录数', label: '新增跟进记录数',
prop: 'count' prop: 'dataCount'
} }
] ]
this.reportData.request = journalQueryRecordCountAPI this.reportData.request = journalQueryActivityCountAPI
this.reportData.paging = false this.reportData.paging = false
this.reportData.sortable = false this.reportData.sortable = false
} else { } else {

Loading…
Cancel
Save