Commit f05f844b authored by rex's avatar rex

Merge branch 'dev' into 'master'

Dev

See merge request !4
parents 1facc496 6afa9e5c
...@@ -3,7 +3,7 @@ export const employee = { ...@@ -3,7 +3,7 @@ export const employee = {
createUrl: '/employee/create', createUrl: '/employee/create',
searchUrl: '/employee/search', searchUrl: '/employee/search',
detailUrl: '/employee/getOne', detailUrl: '/employee/getOne',
updateUrl: '/employee/update', updateUrl: '/updatePassword',
confirmUpdateUrl: '/employee/confirmUpdate', confirmUpdateUrl: '/employee/confirmUpdate',
cancelUpdateUrl: '/employee/cancelUpdate' cancelUpdateUrl: '/employee/cancelUpdate'
} }
...@@ -14,5 +14,6 @@ export const role = { ...@@ -14,5 +14,6 @@ export const role = {
searchUrl: '/roleToMenu/search', searchUrl: '/roleToMenu/search',
detailUrl: '/roleToMenu/getOne', detailUrl: '/roleToMenu/getOne',
updateUrl: '/roleToMenu/update', updateUrl: '/roleToMenu/update',
deleteUrl: '/roleToMenu/delete' deleteUrl: '/roleToMenu/delete',
searchOneUrl: '/roleToMenu/searchOne',
} }
...@@ -7,12 +7,22 @@ export const customer = { ...@@ -7,12 +7,22 @@ export const customer = {
detailUrl: '/customer/getOne', detailUrl: '/customer/getOne',
updateUrl: '/customer/update', updateUrl: '/customer/update',
deleteUrl: '/customer/delete', deleteUrl: '/customer/delete',
updataAppUrl: '/customer/rejectCustomerCommit',
} }
//查询省级供应商待审批列表 //查询省级供应商待审批列表
export const province = { export const province = {
searchUrl: '/customer/searchProcessCustomer', searchUrl: '/customer/searchProcessCustomer',
} }
//查询审批单个列表
export function getCustomer(data) {
return request({
url: '/customer/getOne',
method: 'post',
data
})
}
// 查询全部代理商数据 // 查询全部代理商数据
export function getAllData(data) { export function getAllData(data) {
return request({ return request({
...@@ -21,6 +31,7 @@ export function getAllData(data) { ...@@ -21,6 +31,7 @@ export function getAllData(data) {
data data
}) })
} }
// 新增代理商 // 新增代理商
export function customerCreate(data) { export function customerCreate(data) {
return request({ return request({
...@@ -30,6 +41,15 @@ export function customerCreate(data) { ...@@ -30,6 +41,15 @@ export function customerCreate(data) {
}) })
} }
// 查询单条代理商信息
export function customerGetOne(data) {
return request({
url: '/customer/getOne',
method: 'post',
data
})
}
// 查询省 // 查询省
export function provinceSearch(data) { export function provinceSearch(data) {
return request({ return request({
...@@ -39,7 +59,6 @@ export function provinceSearch(data) { ...@@ -39,7 +59,6 @@ export function provinceSearch(data) {
}) })
} }
// 查询市 // 查询市
export function citySearch(data){ export function citySearch(data){
return request({ return request({
...@@ -58,6 +77,24 @@ export function districtSearch(data){ ...@@ -58,6 +77,24 @@ export function districtSearch(data){
}) })
} }
// 附件查询
export function fileInfoSearch(data){
return request({
url: '/search',
method: 'post',
data
})
}
// CCP高级认证
export function seniorCertification(data) {
return request({
url: '/customer/seniorCertification',
method: 'post',
data
})
}
// 客户发布记录 // 客户发布记录
// 签约产品组 // 签约产品组
export function searchProduct(data) { export function searchProduct(data) {
...@@ -67,6 +104,54 @@ export function searchProduct(data) { ...@@ -67,6 +104,54 @@ export function searchProduct(data) {
data data
}) })
} }
//查询渠道类型
export function typeSearch(data){
return request({
url: '/commonSession/searchAll',
method: 'post',
data
})
}
//查询渠道类型
export function lockRsp(data){
return request({
url: '/customer/searchLockRsp',
method: 'post',
data
})
}
//审批的提交
export function ProcessApproval(data){
return request({
url: '/customer/processApproval',
method: 'post',
data
})
}
//审批流程历史记录
export function processHistory(data){
return request({
url: '/processHistory/searchAll',
method: 'post',
data
})
}
//获取附件列表
export function getModels(data){
return request({
url: '/file/search',
method: 'post',
data
})
}
//单条信息附件
export function getOneModel(data){
return request({
url: '/file/search',
method: 'post',
data
})
}
// // 客户发布记录 // // 客户发布记录
// export const releaseRecord = { // export const releaseRecord = {
// createUrl: '/releaserecord/create', // createUrl: '/releaserecord/create',
...@@ -136,7 +221,7 @@ export function searchProduct(data) { ...@@ -136,7 +221,7 @@ export function searchProduct(data) {
// 客户项目信息 // 客户项目信息
export const project = { export const project = {
createUrl: '/address/create', createUrl: '/address/createByCustomer',
searchUrl: '/address/search', searchUrl: '/address/search',
detailUrl: '/address/getOne', detailUrl: '/address/getOne',
updateUrl: '/address/update', updateUrl: '/address/update',
...@@ -256,11 +341,12 @@ export const project = { ...@@ -256,11 +341,12 @@ export const project = {
// 客户附件 // 客户附件
export const file = { export const file = {
createUrl: '/create', createUrl: '/file/create',
searchUrl: '/search', searchUrl: '/file/search',
detailUrl: '/getOne', detailUrl: '/file/getOne',
updateUrl: '/update', updateUrl: '/file/update',
deleteUrl: '/delete', deleteUrl: '/file/delete',
batchCreate: '/file/batchCreate'
} }
// export const businessLog = { // export const businessLog = {
......
...@@ -178,21 +178,29 @@ export default { ...@@ -178,21 +178,29 @@ export default {
qcc: { qcc: {
searchUrl: '/qcc/search', searchUrl: '/qcc/search',
formDesc: { formDesc: {
Status: {
label: '状态',
type: 'input',
layout: 12,
vif: false,
},
Name: { Name: {
label: '公司名称', label: '公司名称',
type: 'input', type: 'input',
layout: 12 layout: 14
}, },
OperName: { OperName: {
label: '法人', label: '法人',
type: 'input', type: 'input',
layout: 12 layout: 12,
vif: false,
}, },
CreditCode: { CreditCode: {
label: '社会统一信用代码', label: '社会统一信用代码',
type: 'input', type: 'input',
layout: 12 layout: 12,
} vif: false,
},
} }
} }
} }
import request from '@/utils/request'
export const Qcc = { export const Qcc = {
searchUrl: '/qcc/search', searchUrl: '/qcc/search',
detailUrl: '/qcc/getOne' detailUrl: '/qcc/getOne'
...@@ -14,4 +16,12 @@ export const Customer = { ...@@ -14,4 +16,12 @@ export const Customer = {
export const Common = { export const Common = {
searchUrl: '/commonSession/searchAll', searchUrl: '/commonSession/searchAll',
} }
\ No newline at end of file
export function qccGetOne(data) {
return request({
url: '/qcc/getOne',
method: 'post',
data
})
}
...@@ -137,8 +137,8 @@ export default { ...@@ -137,8 +137,8 @@ export default {
this.loading = true this.loading = true
const formData = this.$translateToC4CData(this.formData) const formData = this.$translateToC4CData(this.formData)
if (this.dialogTitle === this.desc.add) { if (this.dialogTitle === this.desc.add) {
const accountID = this.$route.query.objectID || this.tableConfig.initialParams.objectID const BusinessObjectID = this.$route.query.objectID || this.tableConfig.initialParams.objectID
formData.accountID = accountID formData.businessObjectID = BusinessObjectID
this.$request(this.createUrl, [formData]).then(res => { this.$request(this.createUrl, [formData]).then(res => {
this.formData.objectID = res.results[0] this.formData.objectID = res.results[0]
if (this.tableConfig.url) { if (this.tableConfig.url) {
......
...@@ -111,7 +111,7 @@ ...@@ -111,7 +111,7 @@
</template> </template>
<!-- 按钮区插槽 --> <!-- 按钮区插槽 -->
<template v-slot:form-btn="{ btns }"> <!-- <template v-slot:form-btn="{ btns }">
<slot :btns="getBtns(btns)" name="form-btn"> <slot :btns="getBtns(btns)" name="form-btn">
<el-button <el-button
v-for="(btn, index) of btns" v-for="(btn, index) of btns"
...@@ -120,7 +120,7 @@ ...@@ -120,7 +120,7 @@
@click="btn.click" @click="btn.click"
>{{ btn.text }}</el-button> >{{ btn.text }}</el-button>
</slot> </slot>
</template> </template> -->
</ele-form> </ele-form>
</template> </template>
...@@ -145,7 +145,7 @@ export default { ...@@ -145,7 +145,7 @@ export default {
}, },
data() { data() {
return { return {
getDeepFormDesc: null getDeepFormDesc: null,
} }
}, },
computed: { computed: {
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
</template> </template>
<el-option <el-option
v-for="option in options" v-for="option in options"
:key="option.value" :key="option.id || option.value"
:label="option.text" :label="option.text"
:value="option.value" :value="option.value"
v-bind="option.attrs" v-bind="option.attrs"
...@@ -67,6 +67,31 @@ export default { ...@@ -67,6 +67,31 @@ export default {
} }
}, },
methods: { methods: {
// 变化处理
// handleChange(value) {
// var result = {}
// if (!this.attrs.multiple) {
// this.options.forEach(item => {
// if (item.value === value) {
// result = item.value
// }
// })
// } else {
// result = {
// value: [],
// text: []
// }
// this.options.forEach(item => {
// value.forEach(jtem => {
// if (item.value === jtem) {
// result.value.push(item.value)
// result.text.push(item.text)
// }
// })
// })
// }
// this.$emit('input', result)
// },
changeOptions(q) { changeOptions(q) {
if (this.remoteMethod) { if (this.remoteMethod) {
this.loading = true this.loading = true
......
...@@ -163,6 +163,12 @@ export default { ...@@ -163,6 +163,12 @@ export default {
return finalColumns return finalColumns
} }
}, },
watch: {
url: {
handler(newVal) { },
deep: true
}
},
created() { created() {
// 根据url是否有值确定是否需要请求 // 根据url是否有值确定是否需要请求
if (this.url) { if (this.url) {
......
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
<el-button <el-button
type="primary" type="primary"
@click="handleSearch" @click="handleSearch"
>查询</el-button> >{{btnTitle}}</el-button>
<el-button <el-button
plain plain
@click="handleReset" @click="handleReset"
...@@ -75,7 +75,7 @@ ...@@ -75,7 +75,7 @@
highlight-current-row highlight-current-row
:header-cell-style="dialogHeaderCellStyle" :header-cell-style="dialogHeaderCellStyle"
style="width: 100%;" style="width: 100%;"
@row-dblclick="handleSelect" @row-click="handleSelect"
@selection-change="(rows) => (selectedRows = rows)" @selection-change="(rows) => (selectedRows = rows)"
> >
<el-table-column <el-table-column
...@@ -180,6 +180,10 @@ export default { ...@@ -180,6 +180,10 @@ export default {
placeholder: { placeholder: {
type: String, type: String,
default: '' default: ''
},
btnTitle: {
type: String,
default: '查询'
} }
}, },
data: function() { data: function() {
...@@ -197,14 +201,14 @@ export default { ...@@ -197,14 +201,14 @@ export default {
tableData: [], tableData: [],
pageData: { pageData: {
total: 0, total: 0,
currentPage: 0, pageIndex: 0,
pageSize: 10 pageSize: 10
}, },
text: this.value, text: this.value,
selectedRows: [], selectedRows: [],
hovering: false, hovering: false,
focused: false, focused: false,
loading: true loading: false
} }
}, },
computed: { computed: {
...@@ -231,15 +235,17 @@ export default { ...@@ -231,15 +235,17 @@ export default {
var formConfig = Object.assign(this.defaultFormConfig, lovData[this.code]) var formConfig = Object.assign(this.defaultFormConfig, lovData[this.code])
this.formConfig = formConfig this.formConfig = formConfig
this.dialogTableVisible = true this.dialogTableVisible = true
this.handleSearch() // this.handleSearch()
}, },
handleSearch() { handleSearch() {
this.pageData.currentPage = 1 this.pageData.currentPage = 1
this.fetchTable() this.fetchTable()
}, },
handleReset() { handleReset() {
this.tableData = []
this.pageData.total = 0
this.searchData = {} this.searchData = {}
this.handleSearch() // this.handleSearch()
}, },
fetchTable() { fetchTable() {
this.loading = true this.loading = true
...@@ -247,9 +253,24 @@ export default { ...@@ -247,9 +253,24 @@ export default {
const data = Object.assign({}, this.initialParams, this.searchData, this.pageData) const data = Object.assign({}, this.initialParams, this.searchData, this.pageData)
const params = this.$translateToC4CData(data) const params = this.$translateToC4CData(data)
delete params.total delete params.total
console.log(params)
if (this.code === 'qcc') {
params.searchKey = params.name
delete params.name
}
console.log("后",params)
this.$request(url, params).then(res => { this.$request(url, params).then(res => {
this.tableData = res.results.Result || [] this.tableData = res.results.Result || []
this.pageData.total = Number(res.totalSize || 0) if (this.code === 'qcc'){
if (res.results.Paging === null) {
this.pageData.total = 0
} else {
this.pageData.total = Number(res.results.Paging.TotalRecords || 0)
}
}else {
this.pageData.total = Number(res.results.Paging.TotalRecords || 0)
}
// this.pageData.total = Number(res.results.Paging.TotalRecords || 0)
this.loading = false this.loading = false
}) })
}, },
......
...@@ -66,9 +66,9 @@ export default { ...@@ -66,9 +66,9 @@ export default {
externalLink: '外链', externalLink: '外链',
profile: '个人中心', profile: '个人中心',
customers: '代理商', customers: '代理商管理',
potentialCustomers: '省级代理商管理', potentialCustomers: '代理商审批',
regularCustomers: '城市级代理商管理', regularCustomers: '城市级代理商',
enterpriseCustomers: '企业客户', enterpriseCustomers: '企业客户',
products: '产品', products: '产品',
......
...@@ -118,21 +118,21 @@ ...@@ -118,21 +118,21 @@
/> />
</div> </div>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<router-link to="/profile/index">
<el-dropdown-item>
{{ $t('navbar.profile') }}
</el-dropdown-item>
</router-link>
<router-link to="/"> <router-link to="/">
<el-dropdown-item> <el-dropdown-item>
{{ $t('navbar.dashboard') }} {{ $t('navbar.dashboard') }}
</el-dropdown-item> </el-dropdown-item>
</router-link> </router-link>
<router-link to="/changePass/index"> <!-- <router-link to="/profile/index">
<el-dropdown-item>
{{ $t('navbar.profile') }}
</el-dropdown-item>
</router-link> -->
<!-- <router-link to="/changePass/index">
<el-dropdown-item> <el-dropdown-item>
修改密码 修改密码
</el-dropdown-item> </el-dropdown-item>
</router-link> </router-link> -->
<el-dropdown-item <el-dropdown-item
divided divided
@click.native="logout" @click.native="logout"
......
/*
* @Descripttion:
* @Author: 薛泽展
* @Date: 2021-10-12 12:29:05
* @Since: JDK1.8
*/
import router from './router' import router from './router'
import store from './store' import store from './store'
import { Message } from 'element-ui' import { Message } from 'element-ui'
...@@ -14,9 +8,9 @@ import getPageTitle from '@/utils/get-page-title' ...@@ -14,9 +8,9 @@ import getPageTitle from '@/utils/get-page-title'
NProgress.configure({ showSpinner: false }) // NProgress Configuration NProgress.configure({ showSpinner: false }) // NProgress Configuration
const whiteList = ['/prov-register', '/city-register', '/login', '/auth-redirect'] // no redirect whitelist const whiteList = ['/prov-register', '/city-register','/prov-progress','/city-progress' ,'/login', '/auth-redirect'] // no redirect whitelist
router.beforeEach(async(to, from, next) => { router.beforeEach(async (to, from, next) => {
// start progress bar // start progress bar
NProgress.start() NProgress.start()
// set page title // set page title
...@@ -34,7 +28,6 @@ router.beforeEach(async(to, from, next) => { ...@@ -34,7 +28,6 @@ router.beforeEach(async(to, from, next) => {
// determine whether the user has obtained his permission roles through getInfo // determine whether the user has obtained his permission roles through getInfo
const hasRoles = store.getters.roles && store.getters.roles.length > 0 const hasRoles = store.getters.roles && store.getters.roles.length > 0
if (hasRoles) { if (hasRoles) {
console.log(to)
store.commit('permission/SET_CURRENTTOPNAVPATH', to.matched[0].path) store.commit('permission/SET_CURRENTTOPNAVPATH', to.matched[0].path)
const routes = store.getters.permission_routes const routes = store.getters.permission_routes
routes.forEach(route => { routes.forEach(route => {
...@@ -47,10 +40,12 @@ router.beforeEach(async(to, from, next) => { ...@@ -47,10 +40,12 @@ router.beforeEach(async(to, from, next) => {
try { try {
// get user info // get user info
// note: roles must be a object array! such as: ['admin'] or ,['developer','editor'] // note: roles must be a object array! such as: ['admin'] or ,['developer','editor']
const { roles } = await store.dispatch('user/getInfo') const { ExtRoleCode_SDK } = await store.dispatch('user/getInfo')
// generate accessible routes map based on roles // 获取按钮权限
const accessRoutes = await store.dispatch('permission/generateRoutes', roles) await store.dispatch('permission/getPermissions', ExtRoleCode_SDK)
// 获取路由权限
const accessRoutes = await store.dispatch('permission/generateRoutes')
// dynamically add accessible routes // dynamically add accessible routes
router.addRoutes(accessRoutes) router.addRoutes(accessRoutes)
...@@ -62,31 +57,21 @@ router.beforeEach(async(to, from, next) => { ...@@ -62,31 +57,21 @@ router.beforeEach(async(to, from, next) => {
// remove token and go to login page to re-login // remove token and go to login page to re-login
await store.dispatch('user/resetToken') await store.dispatch('user/resetToken')
Message.error(error || 'Has Error') Message.error(error || 'Has Error')
next(`/login?redirect=${to.path}`) next(`/login?redirect=${to.fullPath}`)
NProgress.done() NProgress.done()
} }
} }
} }
} else { } else {
/* has no token*/ /* has no token*/
console.info('=========================111' + to.path)
if (whiteList.indexOf(to.path) !== -1) { if (whiteList.indexOf(to.path) !== -1) {
// in the free login whitelist, go directly // in the free login whitelist, go directly
console.info('=========================2222')
next() next()
} else { } else {
console.info('=========================3333')
// other pages that do not have permission to access are redirected to the login page. // other pages that do not have permission to access are redirected to the login page.
if (to.path === '/city-register') { next(`/login?redirect=${to.fullPath}`)
next({ path: '/city-register'}) NProgress.done()
} else if (to.path === '/prov-register') {
next({ path : '/prov-register'})
} else {
next(`/login?redirect=${to.path}`)
NProgress.done()
}
// next(`/login?redirect=${to.path}`)
// NProgress.done()
} }
} }
}) })
......
...@@ -8,7 +8,7 @@ import Layout from '@/layout' ...@@ -8,7 +8,7 @@ import Layout from '@/layout'
/* Router Modules */ /* Router Modules */
import customersRouter from './modules/customers' import customersRouter from './modules/customers'
// import contractRouter from './modules/contract' import modelsRouter from './modules/models'
// import collectionRouter from './modules/collection' // import collectionRouter from './modules/collection'
// import inventoryRouter from './modules/inventory' // import inventoryRouter from './modules/inventory'
// import productsRouter from './modules/products' // import productsRouter from './modules/products'
...@@ -80,6 +80,16 @@ export const constantRoutes = [ ...@@ -80,6 +80,16 @@ export const constantRoutes = [
component: () => import('@/views/login/city-register/index'), component: () => import('@/views/login/city-register/index'),
hidden: true hidden: true
}, },
{
path: '/prov-progress',
component: () => import('@/views/login/prov-progress/index'),
hidden: true
},
{
path: '/city-progress',
component: () => import('@/views/login/city-progress/index'),
hidden: true
},
{ {
path: '/auth-redirect', path: '/auth-redirect',
component: () => import('@/views/login/auth-redirect'), component: () => import('@/views/login/auth-redirect'),
...@@ -155,7 +165,7 @@ export const asyncRoutes = [ ...@@ -155,7 +165,7 @@ export const asyncRoutes = [
/** when your routing map is too long, you can split it into small modules **/ /** when your routing map is too long, you can split it into small modules **/
customersRouter, customersRouter,
// contractRouter, modelsRouter,
// collectionRouter, // collectionRouter,
// inventoryRouter, // inventoryRouter,
// productsRouter, // productsRouter,
......
...@@ -13,32 +13,77 @@ const customersRouter = { ...@@ -13,32 +13,77 @@ const customersRouter = {
icon: 'user' icon: 'user'
}, },
children: [ children: [
// 总代理商管理
{ {
path: '/overview', path: '/overview',
component: () => import('@/views/customers/customers-overview'), component: () => import('@/views/customers/customers-overview'),
name: 'CustomersOverview', name: 'CustomersOverview',
meta: { title: '总代理商管理' } meta: { title: '总代理商' }
}, },
// 添加新代理商 // 添加新代理商
{ {
path: '/customersAdd', path: '/customersAdd',
component: () => import('@/views/customers/customers-add'), component: () => import('@/views/customers/customers-add'),
name: 'CustomersAdd', name: 'CustomersOverviewAdd',
meta: {title: '代理商新增'}, meta: {title: '代理商新增'},
hidden: true, hidden: true,
}, },
{
path: '/CustomersOverview-detail',
component: () => import('@/views/customers/customers-details/index.vue'),
name: 'CustomersOverviewDetail',
meta: {title: '总代理商详情'},
hidden: true,
},
{
path: '/CustomersProvince-detail',
component: () => import('@/views/customers/customers-details/province.vue'),
name: 'CustomersProvinceDetail',
meta: {title: '省代理商详情'},
hidden: true,
},
{
path: '/CustomersCity-detail',
component: () => import('@/views/customers/customers-details/area.vue'),
name: 'CustomersCityDetail',
meta: {title: '城市代理商详情'},
hidden: true,
},
{
path: '/potential-list',
component: () => import('@/views/customers/potential-list'),
name: 'CustomersProcessDetail',
meta: {title: '省级代理商审批'},
hidden: true,
},
{
path: '/Provincial-agentList',
component: () => import('@/views/customers/provincial-agentList'),
name: 'CustomersProvince',
meta: { title: '省级代理商' }
},
{
path: '/Municipal-agentList',
component: () => import('@/views/customers/municipal-agentList'),
name: 'CustomersCity',
meta: { title: '城市代理商' }
},
{ {
path: '/potential', path: '/potential',
component: () => import('@/views/customers/potential-customers'), component: () => import('@/views/customers/potential-customers'),
name: 'PotentialCustomers', name: 'CustomersProcess',
meta: { title: 'potentialCustomers' } meta: { title: 'potentialCustomers' }
}, },
{ {
path: '/regular', path: '/citypotential-list',
component: () => import('@/views/customers/regular-customers'), component: () => import('@/views/customers/citypotenial-list'),
name: 'RegularCustomers', name: 'CustomersProcessDetail',
meta: { title: 'regularCustomers' } meta: {title: '城市代理商审批'},
hidden: true,
}, {
path: '/Personal-customers',
component: () => import('@/views/customers/personal-customers'),
name: 'CustomersMessage',
meta: { title: '代理商信息' }
}, },
// { // {
// path: 'resource', // path: 'resource',
......
/** When your routing table is too long, you can split it into small modules **/
import Layout from '@/layout'
const modelsRouter = {
path: '/models',
component: Layout,
redirect: '/models/potential',
name: 'Templates',
meta: {
topTitle: '模板',
title: '模板管理',
icon: 'documentation'
},
children: [
{
path: 'total',
component: () => import('@/views/models/total-models'),
name: 'TemplatesOverview',
meta: { title: '总代模板' }
},
{
path: 'prov',
component: () => import('@/views/models/prov-models'),
name: 'TemplatesProvince',
meta: { title: '省代模板' }
},
{
path: 'city',
component: () => import('@/views/models/city-models'),
name: 'TemplatesCity',
meta: { title: '城市模板' }
},
{
path: 'all',
component: () => import('@/views/models/all-models'),
name: 'TemplatesAll',
meta: { title: '全部模板' }
},
// {
// path: 'detail',
// component: () => import('@/views/contract/contract-detail/detail'),
// name: 'ContractDetail',
// hidden: true,
// meta: { title: '合同详情' }
// },
// {
// path: 'template-edit',
// component: () => import('@/views/contract/template-detail/edit'),
// name: 'ContractTemplateDetail',
// hidden: true,
// meta: { title: '合同模板编辑' }
// }
]
}
export default modelsRouter
import { asyncRoutes, constantRoutes } from '@/router' import { asyncRoutes, constantRoutes } from '@/router'
import normalRequest from '@/utils/normal-request'
import { role } from '@/api/account'
/** /**
* Use meta.role to determine if the current user has permission * Use meta.role to determine if the current user has permission
* @param roles * @param roles
* @param route * @param route
*/ */
function hasPermission(roles, route) { function hasPermission(route, paths) {
if (route.meta && route.meta.roles) { // console.log("route",route)
return roles.some(role => route.meta.roles.includes(role)) if (route.name) {
} else { // console.log('name',route.name)
return true return paths.includes(route.name)
} }
} }
function treeToArray(menus, permissions, paths) {
// if (menus && Array.isArray(menus)) {
menus.forEach(item => {
// if (item.isTrue) {
permissions.push(item.ID)
// if (item.path) {
paths.push(item.Path)
// }
// }
// treeToArray(item.subMenus, permissions, paths)
})
// }
}
/** /**
* Filter asynchronous routing tables by recursion * Filter asynchronous routing tables by recursion
* @param routes asyncRoutes * @param routes asyncRoutes
* @param roles * @param permissions
*/ */
export function filterAsyncRoutes(routes, roles) { export function filterAsyncRoutes(routes, paths) {
const res = [] const res = []
routes.forEach(route => { routes.forEach(route => {
const tmp = { ...route } const tmp = { ...route }
if (hasPermission(roles, tmp)) { if (hasPermission(route, paths)) {
if (tmp.children) { if (tmp.children) {
tmp.children = filterAsyncRoutes(tmp.children, roles) tmp.children = filterAsyncRoutes(tmp.children, paths)
} }
res.push(tmp) res.push(tmp)
} }
}) })
// console.log(res)
return res return res
} }
const state = { const state = {
routes: [], // 项目所有的路由 routes: [], // 项目所有的路由
addRoutes: [], addRoutes: [],
paths: JSON.parse(localStorage.getItem('PATHS')) || [], // 菜单路由
permissions: JSON.parse(localStorage.getItem('PERMISSIONS')) || [], // 按钮权限
sideRoutes: [], // 侧边栏路由,用于渲染侧边菜单栏 sideRoutes: [], // 侧边栏路由,用于渲染侧边菜单栏
currentTopNavPath: '' // 当前一级路由地址,用于刷新时回显当前选中的顶端菜单栏 currentTopNavPath: '' // 当前一级路由地址,用于刷新时回显当前选中的顶端菜单栏
} }
...@@ -46,6 +63,12 @@ const mutations = { ...@@ -46,6 +63,12 @@ const mutations = {
state.addRoutes = routes state.addRoutes = routes
state.routes = constantRoutes.concat(routes) state.routes = constantRoutes.concat(routes)
}, },
SET_PERMISSIONS: (state, permissions) => {
state.permissions = permissions
},
SET_PATHS: (state, paths) => {
state.paths = paths
},
SET_CURRENTTOPNAVPATH: (state, path) => { SET_CURRENTTOPNAVPATH: (state, path) => {
state.currentTopNavPath = path state.currentTopNavPath = path
}, },
...@@ -55,17 +78,32 @@ const mutations = { ...@@ -55,17 +78,32 @@ const mutations = {
} }
const actions = { const actions = {
generateRoutes({ commit }, roles) { generateRoutes({ commit }) {
return new Promise(resolve => { return new Promise(resolve => {
const paths = JSON.parse(localStorage.getItem('PATHS'))
let accessedRoutes let accessedRoutes
if (roles.includes('admin')) { const test = false // 是否测试阶段
accessedRoutes = asyncRoutes || [] if (test) {
accessedRoutes = asyncRoutes
} else { } else {
accessedRoutes = filterAsyncRoutes(asyncRoutes, roles) accessedRoutes = filterAsyncRoutes(asyncRoutes, paths)
} }
commit('SET_ROUTES', accessedRoutes) commit('SET_ROUTES', accessedRoutes)
resolve(accessedRoutes) resolve(accessedRoutes)
}) })
},
async getPermissions({ commit }, roleId) {
await normalRequest(role.searchOneUrl, { id: roleId }).then(res => {
var menus = res.results.data.results[0].RoleToMenuMenuList
var permissions = []
var paths = []
treeToArray(menus, permissions, paths)
console.log(paths)
localStorage.setItem('PERMISSIONS', JSON.stringify(permissions))
localStorage.setItem('PATHS', JSON.stringify(paths))
commit('SET_PERMISSIONS', permissions)
commit('SET_PATHS', paths)
})
} }
} }
......
...@@ -38,7 +38,10 @@ const actions = { ...@@ -38,7 +38,10 @@ const actions = {
data.roles = ['admin'] data.roles = ['admin']
data.avatar = 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif' data.avatar = 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif'
commit('SET_TOKEN', data.ObjectID) commit('SET_TOKEN', data.ObjectID)
localStorage.setItem('USERINFO', JSON.stringify(data)) localStorage.setItem('CEINFO', JSON.stringify(data))
if (!data.ExtIsFistTime_SDK) {
localStorage.setItem('USERINFO', JSON.stringify(data))
}
setToken(data.ObjectID) setToken(data.ObjectID)
resolve() resolve()
}).catch(error => { }).catch(error => {
......
This diff is collapsed.
<template> <template>
<div v-if="addBtnStart"> <div>
<FileTable :type-code="typeCode" :objectID='objectId' /> <FileTable :type-code="typeCode" :objectID='objectId' :form-data="$attrs['form-data']"/>
</div> </div>
</template> </template>
...@@ -13,10 +13,10 @@ export default { ...@@ -13,10 +13,10 @@ export default {
FileTable FileTable
}, },
props: { props: {
addBtnStart: { // addBtnStart: {
type: Boolean, // type: Boolean,
default: false // default: false
}, // },
objectId: { objectId: {
type: String, type: String,
default: '' default: ''
...@@ -24,24 +24,30 @@ export default { ...@@ -24,24 +24,30 @@ export default {
}, },
data() { data() {
return { return {
typeCode: uploadCode.customer typeCode: uploadCode.customer,
// addBtnStart: false
} }
}, },
watch: { watch: {
addBtnStart: { // addBtnStart: {
handler(newVal) { // handler(newVal) {
console.log(newVal) // console.log(newVal)
}, // },
immediate: true, // immediate: true,
deep: true // deep: true
}, // },
objectId: { objectId: {
handler(newVal) { handler(newVal) {
console.log(newVal) // constant.tableConfig.initialParams = {
// BusinessObjectID: newVal
// }
}, },
immediate: true, immediate: true,
deep: true deep: true
} }
},
created() {
// this.addBtnStart = this.$route.query.addBtnStart
} }
} }
</script> </script>
......
<template> <template>
<div v-if="addBtnStart"> <div>
<BusinessTable v-bind="constant"/> <BusinessTable v-bind="constant"/>
</div> </div>
</template> </template>
...@@ -9,10 +9,10 @@ import constant from './constant' ...@@ -9,10 +9,10 @@ import constant from './constant'
export default { export default {
props: { props: {
addBtnStart: { // addBtnStart: {
type: Boolean, // type: Boolean,
default: false // default: true
}, // },
objectId: { objectId: {
type: String, type: String,
default: '' default: ''
...@@ -20,33 +20,60 @@ export default { ...@@ -20,33 +20,60 @@ export default {
}, },
data() { data() {
return { return {
constant: {} constant: {},
// addBtnStart: true
} }
}, },
watch: { watch: {
addBtnStart: { // addBtnStart: {
handler(newVal) { // handler(newVal) {
console.log(newVal) // console.log(newVal)
}, // },
immediate: true, // immediate: true,
deep: true // deep: true
}, // },
objectId: { objectId: {
handler(newVal) { handler(newVal) {
constant.tableConfig.initialParams = { constant.tableConfig.initialParams = {
BusinessObjectID: newVal BusinessObjectID: newVal
} }
this.constant = constant
}, },
immediate: true, immediate: true,
deep: true deep: true
} }
}, },
created() { created() {
// this.addBtnStart = this.$route.query.addBtnStart
var config = JSON.parse(JSON.stringify(constant))
config.tableConfig.columns.handle = {
label: '操作',
hideInFilter: true,
fixed: 'right',
renderItem: (h, scope, listeners) => {
return h(
'el-button',
{
on: {
click: (e) => listeners.handleEdit(scope.row, scope.$index)
},
props: {
type: 'text'
}
},
'编辑')
}
}
config.tableConfig.tableTitle = '收货地址'
// 设置表单的初始搜索条件,该条件一般不会发生改变 // 设置表单的初始搜索条件,该条件一般不会发生改变
constant.tableConfig.initialParams = { if (this.$attrs['form-data'] && this.$attrs['form-data'].BusinessObjectID) {
BusinessObjectID: this.objectId config.tableConfig.initialParams = {
BusinessObjectID: this.$attrs['form-data'].BusinessObjectID,
}
} else {
config.tableConfig.url = ''
} }
this.constant = constant this.constant = config
} }
} }
</script> </script>
......
import { provinceSearch, citySearch, districtSearch } from '@/api/customers';
const sections = [
{
title: '基本信息',
formDesc: {
Name: {
type: 'lov',
label: '公司全称',
layout: 16,
code: 'qcc',
displayKey:'Name',
btnTitle: '获取企查查信息',
disabled:true,
returnFn: function(row) {
return {
Name: row.Name,
ExtSocialUnifiedCreditCode_SDK: row.CreditCode,
ExtCorporateName_SDK: row.OperName
}
},
},
ExtSecondName_SDK: {
type: 'input',
label: '公司全称曾用名',
layout: 12,
disabled:true,
},
ExtSocialUnifiedCreditCode_SDK: {
type: 'input',
label: '社会统一信用代码',
layout: 12,
disabled: true
},
ExtRegisteredCapital_SDK: {
type: 'input',
label: '注册资本(万元)',
layout: 12,
default: '',
disabled: true
},
ExtCorporateName_SDK: {
type: 'input',
label: '法人',
layout: 12,
disabled: true
},
// Ext_QuoteOppotunity_KUT: {
// type: 'input',
// label: '税务登记编号',
// layout: 12
// },
}
},
{
title: '地址信息',
formDesc: {
ExtProvince_SDK: {
type: 'select',
label: '省份',
layout: 12,
options: async data => {
const res = await provinceSearch({})
var result = res.results.map(item => {
return {
text: item.Name,
value: item.Code
}
})
return result
},
disabled:true,
},
ExtCity_SDK: {
type: 'select',
label: '地市',
layout: 12,
isOptions: true,
optionsLinkageFields: ['ExtProvince_SDK'],
options: async data => {
if (!data.ExtProvince_SDK) {
return []
}
const res = await citySearch({
provinceCode: data.ExtProvince_SDK
})
var result = res.results.map(item => {
return {
text: item.Name,
value: item.Code
}
})
return result
},
disabled:true,
},
ExtDistrict_SDK: {
type: 'select',
label: '县市',
layout: 12,
isOptions: true,
optionsLinkageFields: ['ExtProvince_SDK', 'ExtCity_SDK'],
options: async data => {
if (!data.ExtCity_SDK) {
return []
}
const res = await districtSearch({
cityCode: data.ExtCity_SDK
})
var result = res.results.map(item => {
return {
text: item.Name,
value: item.Code
}
})
return result
},
disabled:true,
},
ExtAddressDetail_SDK: {
type: 'input',
label: '详细经营地址',
layout: 12,
disabled:true,
},
}
},
{
title: '联系信息',
formDesc: {
ExtLeader_SDK: {
type: 'input',
label: '公司负责人姓名',
layout: 12,
disabled:true,
},
ExtLeaderPhone_SDK: {
type: 'input',
label: '公司负责人联系方式',
layout: 12,
disabled:true,
},
ExtLeaderEmail_SDK: {
type: 'input',
label: '公司负责人邮箱',
layout: 12,
disabled:true,
},
ExtUnis_SDK: {
type: 'input',
layout: 12,
label: 'Unis业务负责人姓名',
disabled:true,
break: true,
},
ExtUnisPhone_SDK: {
type: 'input',
layout: 12,
label: 'Unis业务负责人联系方式',
disabled:true,
},
ExtUnisEmail_SDK: {
type: 'input',
label: 'Unis业务负责人邮箱',
layout: 12,
disabled:true,
},
ExtBusiness_SDK: {
type: 'input',
layout: 12,
label: '商务负责人姓名',
disabled:true,
break: true,
},
ExtBusinessPhone_SDK: {
type: 'input',
layout: 12,
label: '商务负责人联系方式',
disabled:true,
},
ExtBusinessEmail_SDK: {
type: 'input',
label: '商务负责人邮箱',
layout: 12,
disabled:true,
},
}
}
]
export default sections
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -25,7 +25,7 @@ const tableConfig = { ...@@ -25,7 +25,7 @@ const tableConfig = {
// }, scope.row.ID) // }, scope.row.ID)
// } // }
// }, // },
ExtCustomerID_SDK: { ExtAgentID_SDK: {
label: '代理商编码', label: '代理商编码',
type: 'input' type: 'input'
}, },
...@@ -67,7 +67,7 @@ const tableConfig = { ...@@ -67,7 +67,7 @@ const tableConfig = {
icon: 'el-icon-edit-outline', icon: 'el-icon-edit-outline',
type: 'text' type: 'text'
} }
}, i18n.t('table.edit')), }, '详情'),
// h('el-button', { // h('el-button', {
// on: { // on: {
// click: (e) => listeners.handleTakeEffect(scope.row, 'takeEffect') // click: (e) => listeners.handleTakeEffect(scope.row, 'takeEffect')
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
v-bind="tableConfig" v-bind="tableConfig"
:expand-params="expandParams" :expand-params="expandParams"
:listeners="tableListeners" :listeners="tableListeners"
:initialParams="initialParams"
@handleSelectionChange="handleSelectionChange" @handleSelectionChange="handleSelectionChange"
/> />
</div> </div>
...@@ -38,26 +39,28 @@ export default { ...@@ -38,26 +39,28 @@ export default {
return { return {
expandParams: {}, // 筛选条件 expandParams: {}, // 筛选条件
tableListeners: {}, // 事件监听对象,供ele-table内部调用 tableListeners: {}, // 事件监听对象,供ele-table内部调用
tableConfig: constant tableConfig: constant,
initialParams: {
extCustomerType_SDK: "121"
}
} }
}, },
created() { created() {
this.tableListeners = { this.tableListeners = {
// handleDetails: this.handleDetails, // 添加 handleEdit: this.handleEdit, // 详情
// handleTakeEffect: this.handleTakeEffect, // 生效
handleEdit: this.handleEdit, // 编辑
// handleInvalid: this.handleInvalid // 失效
} }
}, },
methods: { methods: {
// 编辑 // 编辑
handleEdit() { handleEdit(row) {
console.log("编辑") console.log(row)
this.$router.push({ path: '/CustomersOverview-detail',query: { objectID: row.ObjectID}})
}, },
// 添加 // 添加
handleAdd() { handleAdd() {
this.$router.push({ path: '/customersAdd' }) this.$router.push({ path: '/customersAdd' })
} },
handleSelectionChange() {}
} }
} }
</script> </script>
......
import i18n from '@/lang'
import { customer } from '@/api/customers'
const tableConfig = {
url: customer.searchUrl,
defaultColumns: {
minWidth: 120,
showOverflowTooltip: true,
align: 'center'
},
columns: {
ExtAgentID_SDK: {
label: '代理商编码',
type: 'input'
},
Name: {
label: '公司名称',
type: 'input',
showInSearch: true,
},
ExtCorporateName_SDK: {
label: '法定人代表',
type: 'input'
},
ExtSocialUnifiedCreditCode_SDK: {
label: '统一社会信用代码',
type: 'input'
},
CreationOn: {
label: '注册时间',
type: 'input'
},
// Ext_QuoteOppotunity_KUT: {
// type: 'input',
// label: '代理商类型',
// showInSearch: true
// },
handle: {
label: '操作',
fixed: 'right',
minWidth: 100,
hideInFilter: true,
renderItem: (h, scope, listeners) => {
return h('div', [
h('el-button', {
on: {
click: (e) => listeners.handleEdit(scope.row, 'edit')
},
props: {
icon: 'el-icon-edit-outline',
type: 'text'
}
}, '详情'),
// h('el-button', {
// on: {
// click: (e) => listeners.handleTakeEffect(scope.row, 'takeEffect')
// },
// props: {
// icon: 'el-icon-circle-check',
// type: 'text'
// }
// }, i18n.t('table.takeEffect')),
// h('el-button', {
// on: {
// click: (e) => listeners.handleInvalid(scope.row, 'invalid')
// },
// props: {
// icon: 'el-icon-circle-check',
// type: 'text'
// }
// }, i18n.t('table.invalid'))
])
}
}
}
}
export default tableConfig
<template>
<div class="app-container">
<ele-search
:columns="tableConfig.columns"
@handleSearch="handleSearch"
@handleReset="handleReset"
@handleFilter="handleFilter"
/>
<div class="table-container">
<ele-table
ref="eleTable"
v-bind="tableConfig"
:expand-params="expandParams"
:listeners="tableListeners"
:initialParams="initialParams"
@handleSelectionChange="handleSelectionChange"
/>
</div>
</div>
</template>
<script>
import constant from './constant'
import tableMixin from '@/mixins/table'
export default {
mixins: [tableMixin],
inject: ['reload'],
data() {
return {
expandParams: {}, // 筛选条件
tableListeners: {}, // 事件监听对象,供ele-table内部调用
tableConfig: constant,
initialParams: {
extCustomerType_SDK: '111'
}
}
},
created() {
this.tableListeners = {
// handleDetails: this.handleDetails, // 添加
// handleTakeEffect: this.handleTakeEffect, // 生效
handleEdit: this.handleEdit, // 编辑
// handleInvalid: this.handleInvalid // 失效
}
},
methods: {
// 编辑
handleEdit(row) {
this.$router.push({ path: '/CustomersCity-detail',query: { objectID: row.ObjectID}})
// console.log("编辑", row)
},
// 添加
handleAdd() {
this.$router.push({ path: '/customersAdd' })
},
handleSelectionChange() {
}
}
}
</script>
<style>
</style>
import { file } from '@/api/customers'
const tableConfig = {
tableTitle: '附件信息',
url: file.searchUrl,
// url: '',
isSearch: true,
defaultColumns: {
minWidth: 120,
showOverflowTooltip: true,
align: 'center'
},
columns: {
CreateOn_SDK: {
label: '创建时间'
},
FileName: {
label: '文件名'
},
handle: {
label: '操作',
hideInFilter: true,
fixed: 'right',
renderItem: (h, scope, listeners) => {
return h('div', [
// h('el-button', {
// on: {
// click: (e) => listeners.handleEdit(scope.row, 'edit')
// },
// props: {
// icon: 'el-icon-edit-outline',
// type: 'text'
// }
// }, '编辑'),
h('el-button', {
on: {
click: (e) => listeners.handleDownload(scope.row, 'takeEffect')
},
props: {
icon: 'el-icon-circle-check',
type: 'text'
}
}, '下载'),
])
},
}
}
}
const formConfig = {
labelPosition: 'left',
isShowBackBtn: false,
isShowSubmitBtn: false,
formDesc: {
TypeCode: {
vif: false,
label: '类型',
default: ''
},
FileDetails: {
label: '附件'
}
}
}
export default {
tableConfig,
formConfig,
...file
}
<template>
<div class="table-container">
<form-title :title="tableConfig.tableTitle">
<div v-if="isShowEditBtn">
<el-button
type="primary"
icon="el-icon-plus"
@click="handleAdd()"
:disabled="addBtnStart"
>添加</el-button>
<el-button
type="danger"
icon="el-icon-delete"
@click="handleDelete()"
:disabled="dedeleBtnStart"
>删除</el-button>
</div>
</form-title>
<ele-table
ref="eleTable"
:multiple="true"
:listeners="tableListeners"
v-bind="tableConfig"
:expand-params="expandParams"
@handleSelectionChange="handleSelectionChange"
/>
<el-dialog
:title="dialogTitle"
:visible.sync="dialogFormVisible"
:loading="loading"
>
<ele-form
ref="form"
v-model="formData"
v-bind="formConfig"
>
<template v-slot:FileDetails>
<upload-btn
:objectID="formData.ObjectID"
:fileDetails="formData.FileDetails"
:file-list="fileList"
@change="changeFileList"
/>
</template>
</ele-form>
<div
slot="footer"
class="dialog-footer"
>
<el-button @click="dialogFormVisible = false">取消</el-button>
<el-button
type="primary"
@click="handleSave"
:loading='loading'
>保存</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import constant from './constant'
import UploadBtn from './upload-btn'
import { file, fileInfoSearch } from '@/api/customers'
export default {
components: { UploadBtn, fileInfoSearch },
name: 'FileInfo',
props: {
isShowEditBtn: {
type: Boolean,
default: true
},
// 不同的typeCode代表不同模块的附件
typeCode: {
type: String,
required: true
},
// 同一模块的附件通过moduleType区分
moduleType: {
type: String,
default: ''
},
// path: {
// type: String,
// required: true
// },
objectID: {
type: String,
default: ''
},
addBtnStart: {
type: Boolean,
default: true,
},
dedeleBtnStart: {
type: Boolean,
default: true,
},
isShowBtn: {
type: Boolean,
default: true,
}
},
data() {
return {
tableConfig: constant.tableConfig,
formConfig: constant.formConfig,
expandParams: {},
desc: {},
tableListeners: {}, // 事件监听对象,供ele-table内部调用
formData: {},
fileList: [],
row: {},
$index: -1,
current: null,
dialogFormVisible: false,
dialogTitle: '',
loading: false,
// url: ''
}
},
watch: {
isShowEditBtn: {
handler(val){},
deep: true,
immediate: true
// this.tableConfig.columns.handle.vif = val
},
addBtnStart: {
handler(val){},
deep: true,
immediate: true,
},
dedeleBtnStart: {
handler(val){},
deep: true,
immediate: true,
},
isShowBtn: {
handler(val){},
deep: true,
immediate: true,
}
},
created() {
this.tableConfig.columns.handle.vif = this.isShowBtn
constant.tableConfig.initialParams = {
BusinessObjectID: this.objectID || this.$route.query.objectID,
TypeCode: this.typeCode
}
if (this.moduleType) {
constant.tableConfig.initialParams.ModuleType = this.moduleType
}
constant.formConfig.formDesc.TypeCode.default = this.typeCode
// constant.formConfig.formDesc.Path.default = this.path
this.tableListeners = {
handleEdit: this.handleEdit,
handleDownload: this.handleDownload
}
},
methods: {
getDetails(params) {
this.loading = true
this.$request(file.detailUrl, params).then((res) => {
this.loading = false
this.formData = res.results[0]
})
},
handleAdd() {
this.dialogTitle = '创建附件'
// this.formData = {}
this.fileList = []
this.dialogFormVisible = true
},
handleEdit(row, index) {
this.dialogTitle = '编辑附件'
this.$index = index
this.row = row
this.formData = {}
this.getDetails({ objectID: row.ObjectID })
this.fileList = []
this.dialogFormVisible = true
},
// 选择/删除临时文件
changeFileList(fileList) {
this.fileList = fileList
},
handleSave() {
const fd = this.$getUpdateChange(this.row, this.formData)
if (Object.keys(fd).length < 2 && this.fileList.length === 0) {
this.dialogFormVisible = false
return
}
const formData = new FormData()
for (const key in fd) {
formData.append(key, fd[key])
}
if (this.moduleType) {
formData.append('moduleType', this.moduleType)
}
this.fileList.forEach((item) => {
formData.append('file', item.raw)
})
// if (this.fileList.length > 0) {
// formData.path = this.path
// }
if (!this.formData.ObjectID) {
const businessObjectID =
this.$route.query.objectID || this.tableConfig.initialParams.objectID
console.log(businessObjectID)
formData.append('businessObjectID', businessObjectID)
formData.delete('objectID')
this.loading = true
this.$request(file.createUrl, formData).then(() => {
this.loading = false
this.dialogFormVisible = false
this.fileList = []
this.$message.success('添加成功!')
this.$refs.eleTable.url = file.searchUrl
this.$refs.eleTable.handleSearch()
}).catch(() => {
this.loading = false
})
} else {
formData.append('typeCode', this.typeCode)
this.$request(file.updateUrl, formData).then((res) => {
this.loading = false
this.dialogFormVisible = false
this.$message.success('修改成功!')
// this.tableConfig.url = file.searchUrl
this.$refs.eleTable.url = file.searchUrl
this.$refs.eleTable.handleSearch()
}).catch(() => {
this.loading = false
})
}
},
handleSelectionChange(selection) {
this.current = selection.length > 0 ? selection[0] : null
},
handleDelete() {
if (this.current === null) {
this.$message.warning('请先选择一行数据')
return
}
console.log(this.$refs.eleTable.tableData)
if (!this.$refs.eleTable.tableData[0].FileLabel == 1) {
this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$request(file.deleteUrl, { objectID: this.current.ObjectID }).then(() => {
this.$message.success('删除成功!')
this.$refs.eleTable.url = file.searchUrl
this.$refs.eleTable.handleSearch()
}
)
})
} else {
this.$message.error('当前选中的附件禁止删除')
}
// this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
// confirmButtonText: '确定',
// cancelButtonText: '取消',
// type: 'warning'
// }).then(() => {
// this.$request(file.deleteUrl, { objectID: this.current.ObjectID }).then(() => {
// this.$message.success('删除成功!')
// this.$refs.eleTable.url = file.searchUrl
// this.$refs.eleTable.handleSearch()
// }
// )
// })
},
handleDownload(row) {
window.open(row.FileURL)
}
}
}
</script>
<style>
</style>
<template>
<div>
<el-upload
v-if="vif"
:disabled="disabled"
ref="upload"
action="false"
:limit="5"
:multiple="multiple"
:on-change="handleChange"
:on-remove="handleRemove"
:auto-upload="false"
:on-exceed="handleExceed"
:file-list="fileList"
>
<el-button size="small" type="primary">上传文件</el-button>
</el-upload>
<!-- <upload-list
v-if="objectID"
v-bind="config"
:files="fileDetails"
@remove="handleRemoveReq" /> -->
</div>
</template>
<script>
import { file } from '@/api/customers'
import UploadList from '@/components/UploadFile/UploadList.vue'
export default {
components: { UploadList },
name: 'UploadBtn',
props: {
vif: {
type: Boolean,
default: true
},
disabled: {
type: Boolean,
default: false
},
objectID: {
type: String,
default: function() {
return this.$route.query.objectID
}
},
// 是否支持多选文件
multiple: {
type: Boolean,
default: false
},
// 已上传到服务器的文件列表
fileDetails: {
type: Array,
default: function() {
return []
}
},
config: {
type: Object,
default: function() {
return {}
}
},
fileList: {
type: Array,
default: function() {
return []
}
}
},
data() {
return {}
},
watch: {
fileList: {
handler(newVal){ },
deep: true,
immediate: true,
}
},
created() {
},
methods: {
// 监控上传文件列表
handleChange(file, fileList) {
this.fileList = fileList
this.$emit('change', fileList)
},
// 移除文件
handleRemove(file, fileList) {
this.fileList = fileList
this.$emit('change', fileList)
},
handleExceed() {
this.$message.warning('上传文件超出文件数量')
}
// // 删除文件
// handleRemoveReq(index, item) {
// this.$request(file.deleteDetailUrl, [{ objectID: item.ObjectID }]).then(() => {
// this.$message.success('删除成功!')
// this.fileDetails.splice(index, 1)
// }
// )
// }
}
}
</script>
<style>
</style>
This diff is collapsed.
...@@ -25,26 +25,26 @@ const tableConfig = { ...@@ -25,26 +25,26 @@ const tableConfig = {
}, scope.row.ID) }, scope.row.ID)
} }
}, },
ExtProductGroup_SDK: { // ExtProductGroup_SDK: {
label: '签约产品组', // label: '签约产品组',
showInSearch: true, // showInSearch: true,
type: 'select', // type: 'select',
fixed: 'left', // fixed: 'left',
isOptions:'true', // isOptions:'true',
options: async data => { // options: async data => {
const res = await searchProduct({code:'ExtProductGroup_SDK',module:'Customer'}) // const res = await searchProduct({code:'ExtProductGroup_SDK',module:'Customer'})
var result = res.map(item => { // var result = res.map(item => {
return { // return {
text: item.content, // text: item.content,
value: item.keyword // value: item.keyword
} // }
}) // })
return result // return result
}, // },
}, // },
}, },
columns: { columns: {
ExtCustomerID_SDK: { ExtAgentID_SDK: {
label: '代理商编码', label: '代理商编码',
type: 'input' type: 'input'
}, },
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
<ele-table <ele-table
ref="eleTable" ref="eleTable"
v-bind="tableConfig" v-bind="tableConfig"
:expand-params="expandParams"
:listeners="tableListeners" :listeners="tableListeners"
/> />
...@@ -27,7 +26,6 @@ export default { ...@@ -27,7 +26,6 @@ export default {
inject: ['reload'], inject: ['reload'],
data() { data() {
return { return {
expandParams: {}, // 筛选条件
tableListeners: {}, // 事件监听对象,供ele-table内部调用 tableListeners: {}, // 事件监听对象,供ele-table内部调用
tableConfig: constant tableConfig: constant
} }
...@@ -43,7 +41,12 @@ export default { ...@@ -43,7 +41,12 @@ export default {
methods: { methods: {
// 编辑 // 编辑
handleEdit(val) { handleEdit(val) {
this.$router.push({ path: '/customersAdd',query:{id:val.ObjectID} }) if(val.ExtCustomerType_SDK=='101'){
this.$router.push({ path: '/potential-list',query:{id:val.ObjectID} })
}else{
this.$router.push({ path: '/citypotential-list',query:{id:val.ObjectID} })
}
}, },
} }
......
This diff is collapsed.
import i18n from '@/lang'
import { customer } from '@/api/customers'
const tableConfig = {
url: customer.searchUrl,
defaultColumns: {
minWidth: 120,
showOverflowTooltip: true,
align: 'center'
},
columns: {
ExtAgentID_SDK: {
label: '代理商编码',
type: 'input'
},
Name: {
label: '公司名称',
type: 'input',
showInSearch: true,
},
ExtCorporateName_SDK: {
label: '法定人代表',
type: 'input'
},
ExtSocialUnifiedCreditCode_SDK: {
label: '统一社会信用代码',
type: 'input'
},
CreationOn: {
label: '注册时间',
type: 'input'
},
// Ext_QuoteOppotunity_KUT: {
// type: 'input',
// label: '代理商类型',
// showInSearch: true
// },
handle: {
label: '操作',
fixed: 'right',
minWidth: 100,
hideInFilter: true,
renderItem: (h, scope, listeners) => {
return h('div', [
h('el-button', {
on: {
click: (e) => listeners.handleEdit(scope.row, 'edit')
},
props: {
icon: 'el-icon-edit-outline',
type: 'text'
}
}, '详情'),
// h('el-button', {
// on: {
// click: (e) => listeners.handleTakeEffect(scope.row, 'takeEffect')
// },
// props: {
// icon: 'el-icon-circle-check',
// type: 'text'
// }
// }, i18n.t('table.takeEffect')),
// h('el-button', {
// on: {
// click: (e) => listeners.handleInvalid(scope.row, 'invalid')
// },
// props: {
// icon: 'el-icon-circle-check',
// type: 'text'
// }
// }, i18n.t('table.invalid'))
])
}
}
}
}
export default tableConfig
<template>
<div class="app-container">
<ele-search
:columns="tableConfig.columns"
@handleSearch="handleSearch"
@handleReset="handleReset"
@handleFilter="handleFilter"
/>
<div class="table-container">
<ele-table
ref="eleTable"
v-bind="tableConfig"
:expand-params="expandParams"
:listeners="tableListeners"
:initialParams="initialParams"
@handleSelectionChange="handleSelectionChange"
/>
</div>
</div>
</template>
<script>
import constant from './constant'
import tableMixin from '@/mixins/table'
export default {
mixins: [tableMixin],
inject: ['reload'],
data() {
return {
expandParams: {}, // 筛选条件
tableListeners: {}, // 事件监听对象,供ele-table内部调用
tableConfig: constant,
initialParams: {
extCustomerType_SDK: '101'
}
}
},
created() {
this.tableListeners = {
// handleDetails: this.handleDetails, // 添加
// handleTakeEffect: this.handleTakeEffect, // 生效
handleEdit: this.handleEdit, // 编辑
// handleInvalid: this.handleInvalid // 失效
}
},
methods: {
// 编辑
handleEdit(row) {
this.$router.push({ path: '/CustomersProvince-detail',query: { objectID: row.ObjectID}})
console.log("编辑", row)
},
// 添加
handleAdd() {
this.$router.push({ path: '/customersAdd' })
},
handleSelectionChange() {
}
}
}
</script>
<style>
</style>
<template> <template>
<div class="dashboard-editor-container"> <div>
<h2>首页</h2>
<panel-group @handleSetLineChartData="handleSetLineChartData" />
<div class="two-column">
<div class="left" />
<SystemNotice />
</div>
<div class="two-column">
<div class="left" />
</div>
<el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;">
<line-chart :chart-data="lineChartData" />
</el-row>
<el-row :gutter="32">
<el-col
:xs="24"
:sm="24"
:lg="8"
>
<div class="chart-wrapper">
<raddar-chart />
</div>
</el-col>
<el-col
:xs="24"
:sm="24"
:lg="8"
>
<div class="chart-wrapper">
<pie-chart />
</div>
</el-col>
<el-col
:xs="24"
:sm="24"
:lg="8"
>
<div class="chart-wrapper">
<bar-chart />
</div>
</el-col>
</el-row>
<el-row :gutter="8">
<el-col
:xs="{span: 24}"
:sm="{span: 24}"
:md="{span: 24}"
:lg="{span: 12}"
:xl="{span: 12}"
style="padding-right:8px;margin-bottom:30px;"
>
<transaction-table />
</el-col>
<el-col
:xs="{span: 24}"
:sm="{span: 12}"
:md="{span: 12}"
:lg="{span: 6}"
:xl="{span: 6}"
style="margin-bottom:30px;"
>
<todo-list />
</el-col>
<el-col
:xs="{span: 24}"
:sm="{span: 12}"
:md="{span: 12}"
:lg="{span: 6}"
:xl="{span: 6}"
style="margin-bottom:30px;"
>
<box-card />
</el-col>
</el-row>
</div> </div>
</template> </template>
<script> <script>
import SystemNotice from './components/SystemNotice'
// import ComplaintsAndSuggestions from './components/ComplaintsAndSuggestions'
import PanelGroup from './components/PanelGroup'
import LineChart from './components/LineChart'
import RaddarChart from './components/RaddarChart'
import PieChart from './components/PieChart'
import BarChart from './components/BarChart'
import TransactionTable from './components/TransactionTable'
import TodoList from './components/TodoList'
import BoxCard from './components/BoxCard'
const lineChartData = {
newVisitis: {
expectedData: [100, 120, 161, 134, 105, 160, 165],
actualData: [120, 82, 91, 154, 162, 140, 145]
},
messages: {
expectedData: [200, 192, 120, 144, 160, 130, 140],
actualData: [180, 160, 151, 106, 145, 150, 130]
},
purchases: {
expectedData: [80, 100, 121, 104, 105, 90, 100],
actualData: [120, 90, 100, 138, 142, 130, 130]
},
shoppings: {
expectedData: [130, 140, 141, 142, 145, 150, 160],
actualData: [120, 82, 91, 154, 162, 140, 130]
}
}
export default { export default {
name: 'DashboardAdmin',
components: {
SystemNotice,
// ComplaintsAndSuggestions,
PanelGroup,
LineChart,
RaddarChart,
PieChart,
BarChart,
TransactionTable,
TodoList,
BoxCard
},
data() {
return {
lineChartData: lineChartData.newVisitis
}
},
methods: {
handleSetLineChartData(type) {
this.lineChartData = lineChartData[type]
}
}
}
</script>
<style lang="scss" scoped>
.dashboard-editor-container {
padding: 32px;
background-color: rgb(240, 242, 245);
position: relative;
.github-corner {
position: absolute;
top: 0px;
border: 0;
right: 0;
}
.chart-wrapper {
background: #fff;
padding: 16px 16px 0;
margin-bottom: 32px;
}
} }
</script>
@media (max-width: 1024px) { <style>
.chart-wrapper {
padding: 8px;
}
}
.two-column { </style>
display: flex; \ No newline at end of file
justify-content: space-between;
margin-bottom: 30px;
> div {
width: 49%;
background-color: #fff;
}
}
</style>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment