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 = {
createUrl: '/employee/create',
searchUrl: '/employee/search',
detailUrl: '/employee/getOne',
updateUrl: '/employee/update',
updateUrl: '/updatePassword',
confirmUpdateUrl: '/employee/confirmUpdate',
cancelUpdateUrl: '/employee/cancelUpdate'
}
......@@ -14,5 +14,6 @@ export const role = {
searchUrl: '/roleToMenu/search',
detailUrl: '/roleToMenu/getOne',
updateUrl: '/roleToMenu/update',
deleteUrl: '/roleToMenu/delete'
deleteUrl: '/roleToMenu/delete',
searchOneUrl: '/roleToMenu/searchOne',
}
......@@ -7,12 +7,22 @@ export const customer = {
detailUrl: '/customer/getOne',
updateUrl: '/customer/update',
deleteUrl: '/customer/delete',
updataAppUrl: '/customer/rejectCustomerCommit',
}
//查询省级供应商待审批列表
export const province = {
searchUrl: '/customer/searchProcessCustomer',
}
//查询审批单个列表
export function getCustomer(data) {
return request({
url: '/customer/getOne',
method: 'post',
data
})
}
// 查询全部代理商数据
export function getAllData(data) {
return request({
......@@ -21,6 +31,7 @@ export function getAllData(data) {
data
})
}
// 新增代理商
export function customerCreate(data) {
return request({
......@@ -30,6 +41,15 @@ export function customerCreate(data) {
})
}
// 查询单条代理商信息
export function customerGetOne(data) {
return request({
url: '/customer/getOne',
method: 'post',
data
})
}
// 查询省
export function provinceSearch(data) {
return request({
......@@ -39,7 +59,6 @@ export function provinceSearch(data) {
})
}
// 查询市
export function citySearch(data){
return request({
......@@ -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) {
......@@ -67,6 +104,54 @@ export function searchProduct(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 = {
// createUrl: '/releaserecord/create',
......@@ -136,7 +221,7 @@ export function searchProduct(data) {
// 客户项目信息
export const project = {
createUrl: '/address/create',
createUrl: '/address/createByCustomer',
searchUrl: '/address/search',
detailUrl: '/address/getOne',
updateUrl: '/address/update',
......@@ -256,11 +341,12 @@ export const project = {
// 客户附件
export const file = {
createUrl: '/create',
searchUrl: '/search',
detailUrl: '/getOne',
updateUrl: '/update',
deleteUrl: '/delete',
createUrl: '/file/create',
searchUrl: '/file/search',
detailUrl: '/file/getOne',
updateUrl: '/file/update',
deleteUrl: '/file/delete',
batchCreate: '/file/batchCreate'
}
// export const businessLog = {
......
......@@ -178,21 +178,29 @@ export default {
qcc: {
searchUrl: '/qcc/search',
formDesc: {
Status: {
label: '状态',
type: 'input',
layout: 12,
vif: false,
},
Name: {
label: '公司名称',
type: 'input',
layout: 12
layout: 14
},
OperName: {
label: '法人',
type: 'input',
layout: 12
layout: 12,
vif: false,
},
CreditCode: {
label: '社会统一信用代码',
type: 'input',
layout: 12
}
layout: 12,
vif: false,
},
}
}
}
import request from '@/utils/request'
export const Qcc = {
searchUrl: '/qcc/search',
detailUrl: '/qcc/getOne'
......@@ -15,3 +17,11 @@ export const Customer = {
export const Common = {
searchUrl: '/commonSession/searchAll',
}
export function qccGetOne(data) {
return request({
url: '/qcc/getOne',
method: 'post',
data
})
}
......@@ -137,8 +137,8 @@ export default {
this.loading = true
const formData = this.$translateToC4CData(this.formData)
if (this.dialogTitle === this.desc.add) {
const accountID = this.$route.query.objectID || this.tableConfig.initialParams.objectID
formData.accountID = accountID
const BusinessObjectID = this.$route.query.objectID || this.tableConfig.initialParams.objectID
formData.businessObjectID = BusinessObjectID
this.$request(this.createUrl, [formData]).then(res => {
this.formData.objectID = res.results[0]
if (this.tableConfig.url) {
......
......@@ -111,7 +111,7 @@
</template>
<!-- 按钮区插槽 -->
<template v-slot:form-btn="{ btns }">
<!-- <template v-slot:form-btn="{ btns }">
<slot :btns="getBtns(btns)" name="form-btn">
<el-button
v-for="(btn, index) of btns"
......@@ -120,7 +120,7 @@
@click="btn.click"
>{{ btn.text }}</el-button>
</slot>
</template>
</template> -->
</ele-form>
</template>
......@@ -145,7 +145,7 @@ export default {
},
data() {
return {
getDeepFormDesc: null
getDeepFormDesc: null,
}
},
computed: {
......
......@@ -23,7 +23,7 @@
</template>
<el-option
v-for="option in options"
:key="option.value"
:key="option.id || option.value"
:label="option.text"
:value="option.value"
v-bind="option.attrs"
......@@ -67,6 +67,31 @@ export default {
}
},
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) {
if (this.remoteMethod) {
this.loading = true
......
......@@ -163,6 +163,12 @@ export default {
return finalColumns
}
},
watch: {
url: {
handler(newVal) { },
deep: true
}
},
created() {
// 根据url是否有值确定是否需要请求
if (this.url) {
......
......@@ -54,7 +54,7 @@
<el-button
type="primary"
@click="handleSearch"
>查询</el-button>
>{{btnTitle}}</el-button>
<el-button
plain
@click="handleReset"
......@@ -75,7 +75,7 @@
highlight-current-row
:header-cell-style="dialogHeaderCellStyle"
style="width: 100%;"
@row-dblclick="handleSelect"
@row-click="handleSelect"
@selection-change="(rows) => (selectedRows = rows)"
>
<el-table-column
......@@ -180,6 +180,10 @@ export default {
placeholder: {
type: String,
default: ''
},
btnTitle: {
type: String,
default: '查询'
}
},
data: function() {
......@@ -197,14 +201,14 @@ export default {
tableData: [],
pageData: {
total: 0,
currentPage: 0,
pageIndex: 0,
pageSize: 10
},
text: this.value,
selectedRows: [],
hovering: false,
focused: false,
loading: true
loading: false
}
},
computed: {
......@@ -231,15 +235,17 @@ export default {
var formConfig = Object.assign(this.defaultFormConfig, lovData[this.code])
this.formConfig = formConfig
this.dialogTableVisible = true
this.handleSearch()
// this.handleSearch()
},
handleSearch() {
this.pageData.currentPage = 1
this.fetchTable()
},
handleReset() {
this.tableData = []
this.pageData.total = 0
this.searchData = {}
this.handleSearch()
// this.handleSearch()
},
fetchTable() {
this.loading = true
......@@ -247,9 +253,24 @@ export default {
const data = Object.assign({}, this.initialParams, this.searchData, this.pageData)
const params = this.$translateToC4CData(data)
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.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
})
},
......
......@@ -66,9 +66,9 @@ export default {
externalLink: '外链',
profile: '个人中心',
customers: '代理商',
potentialCustomers: '省级代理商管理',
regularCustomers: '城市级代理商管理',
customers: '代理商管理',
potentialCustomers: '代理商审批',
regularCustomers: '城市级代理商',
enterpriseCustomers: '企业客户',
products: '产品',
......
......@@ -118,21 +118,21 @@
/>
</div>
<el-dropdown-menu slot="dropdown">
<router-link to="/profile/index">
<el-dropdown-item>
{{ $t('navbar.profile') }}
</el-dropdown-item>
</router-link>
<router-link to="/">
<el-dropdown-item>
{{ $t('navbar.dashboard') }}
</el-dropdown-item>
</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>
</router-link>
</router-link> -->
<el-dropdown-item
divided
@click.native="logout"
......
/*
* @Descripttion:
* @Author: 薛泽展
* @Date: 2021-10-12 12:29:05
* @Since: JDK1.8
*/
import router from './router'
import store from './store'
import { Message } from 'element-ui'
......@@ -14,9 +8,9 @@ import getPageTitle from '@/utils/get-page-title'
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
NProgress.start()
// set page title
......@@ -34,7 +28,6 @@ router.beforeEach(async(to, from, next) => {
// determine whether the user has obtained his permission roles through getInfo
const hasRoles = store.getters.roles && store.getters.roles.length > 0
if (hasRoles) {
console.log(to)
store.commit('permission/SET_CURRENTTOPNAVPATH', to.matched[0].path)
const routes = store.getters.permission_routes
routes.forEach(route => {
......@@ -47,10 +40,12 @@ router.beforeEach(async(to, from, next) => {
try {
// get user info
// 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
router.addRoutes(accessRoutes)
......@@ -62,32 +57,22 @@ router.beforeEach(async(to, from, next) => {
// remove token and go to login page to re-login
await store.dispatch('user/resetToken')
Message.error(error || 'Has Error')
next(`/login?redirect=${to.path}`)
next(`/login?redirect=${to.fullPath}`)
NProgress.done()
}
}
}
} else {
/* has no token*/
console.info('=========================111' + to.path)
if (whiteList.indexOf(to.path) !== -1) {
// in the free login whitelist, go directly
console.info('=========================2222')
next()
} else {
console.info('=========================3333')
// other pages that do not have permission to access are redirected to the login page.
if (to.path === '/city-register') {
next({ path: '/city-register'})
} else if (to.path === '/prov-register') {
next({ path : '/prov-register'})
} else {
next(`/login?redirect=${to.path}`)
next(`/login?redirect=${to.fullPath}`)
NProgress.done()
}
// next(`/login?redirect=${to.path}`)
// NProgress.done()
}
}
})
......
......@@ -8,7 +8,7 @@ import Layout from '@/layout'
/* Router Modules */
import customersRouter from './modules/customers'
// import contractRouter from './modules/contract'
import modelsRouter from './modules/models'
// import collectionRouter from './modules/collection'
// import inventoryRouter from './modules/inventory'
// import productsRouter from './modules/products'
......@@ -80,6 +80,16 @@ export const constantRoutes = [
component: () => import('@/views/login/city-register/index'),
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',
component: () => import('@/views/login/auth-redirect'),
......@@ -155,7 +165,7 @@ export const asyncRoutes = [
/** when your routing map is too long, you can split it into small modules **/
customersRouter,
// contractRouter,
modelsRouter,
// collectionRouter,
// inventoryRouter,
// productsRouter,
......
......@@ -13,32 +13,77 @@ const customersRouter = {
icon: 'user'
},
children: [
// 总代理商管理
{
path: '/overview',
component: () => import('@/views/customers/customers-overview'),
name: 'CustomersOverview',
meta: { title: '总代理商管理' }
meta: { title: '总代理商' }
},
// 添加新代理商
{
path: '/customersAdd',
component: () => import('@/views/customers/customers-add'),
name: 'CustomersAdd',
name: 'CustomersOverviewAdd',
meta: {title: '代理商新增'},
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',
component: () => import('@/views/customers/potential-customers'),
name: 'PotentialCustomers',
name: 'CustomersProcess',
meta: { title: 'potentialCustomers' }
},
{
path: '/regular',
component: () => import('@/views/customers/regular-customers'),
name: 'RegularCustomers',
meta: { title: 'regularCustomers' }
path: '/citypotential-list',
component: () => import('@/views/customers/citypotenial-list'),
name: 'CustomersProcessDetail',
meta: {title: '城市代理商审批'},
hidden: true,
}, {
path: '/Personal-customers',
component: () => import('@/views/customers/personal-customers'),
name: 'CustomersMessage',
meta: { title: '代理商信息' }
},
// {
// 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 normalRequest from '@/utils/normal-request'
import { role } from '@/api/account'
/**
* Use meta.role to determine if the current user has permission
* @param roles
* @param route
*/
function hasPermission(roles, route) {
if (route.meta && route.meta.roles) {
return roles.some(role => route.meta.roles.includes(role))
} else {
return true
function hasPermission(route, paths) {
// console.log("route",route)
if (route.name) {
// console.log('name',route.name)
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
* @param routes asyncRoutes
* @param roles
* @param permissions
*/
export function filterAsyncRoutes(routes, roles) {
export function filterAsyncRoutes(routes, paths) {
const res = []
routes.forEach(route => {
const tmp = { ...route }
if (hasPermission(roles, tmp)) {
if (hasPermission(route, paths)) {
if (tmp.children) {
tmp.children = filterAsyncRoutes(tmp.children, roles)
tmp.children = filterAsyncRoutes(tmp.children, paths)
}
res.push(tmp)
}
})
// console.log(res)
return res
}
const state = {
routes: [], // 项目所有的路由
addRoutes: [],
paths: JSON.parse(localStorage.getItem('PATHS')) || [], // 菜单路由
permissions: JSON.parse(localStorage.getItem('PERMISSIONS')) || [], // 按钮权限
sideRoutes: [], // 侧边栏路由,用于渲染侧边菜单栏
currentTopNavPath: '' // 当前一级路由地址,用于刷新时回显当前选中的顶端菜单栏
}
......@@ -46,6 +63,12 @@ const mutations = {
state.addRoutes = routes
state.routes = constantRoutes.concat(routes)
},
SET_PERMISSIONS: (state, permissions) => {
state.permissions = permissions
},
SET_PATHS: (state, paths) => {
state.paths = paths
},
SET_CURRENTTOPNAVPATH: (state, path) => {
state.currentTopNavPath = path
},
......@@ -55,17 +78,32 @@ const mutations = {
}
const actions = {
generateRoutes({ commit }, roles) {
generateRoutes({ commit }) {
return new Promise(resolve => {
const paths = JSON.parse(localStorage.getItem('PATHS'))
let accessedRoutes
if (roles.includes('admin')) {
accessedRoutes = asyncRoutes || []
const test = false // 是否测试阶段
if (test) {
accessedRoutes = asyncRoutes
} else {
accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
accessedRoutes = filterAsyncRoutes(asyncRoutes, paths)
}
commit('SET_ROUTES', 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 = {
data.roles = ['admin']
data.avatar = 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif'
commit('SET_TOKEN', data.ObjectID)
localStorage.setItem('CEINFO', JSON.stringify(data))
if (!data.ExtIsFistTime_SDK) {
localStorage.setItem('USERINFO', JSON.stringify(data))
}
setToken(data.ObjectID)
resolve()
}).catch(error => {
......
This diff is collapsed.
<template>
<div v-if="addBtnStart">
<FileTable :type-code="typeCode" :objectID='objectId' />
<div>
<FileTable :type-code="typeCode" :objectID='objectId' :form-data="$attrs['form-data']"/>
</div>
</template>
......@@ -13,10 +13,10 @@ export default {
FileTable
},
props: {
addBtnStart: {
type: Boolean,
default: false
},
// addBtnStart: {
// type: Boolean,
// default: false
// },
objectId: {
type: String,
default: ''
......@@ -24,24 +24,30 @@ export default {
},
data() {
return {
typeCode: uploadCode.customer
typeCode: uploadCode.customer,
// addBtnStart: false
}
},
watch: {
addBtnStart: {
handler(newVal) {
console.log(newVal)
},
immediate: true,
deep: true
},
// addBtnStart: {
// handler(newVal) {
// console.log(newVal)
// },
// immediate: true,
// deep: true
// },
objectId: {
handler(newVal) {
console.log(newVal)
// constant.tableConfig.initialParams = {
// BusinessObjectID: newVal
// }
},
immediate: true,
deep: true
}
},
created() {
// this.addBtnStart = this.$route.query.addBtnStart
}
}
</script>
......
<template>
<div v-if="addBtnStart">
<div>
<BusinessTable v-bind="constant"/>
</div>
</template>
......@@ -9,10 +9,10 @@ import constant from './constant'
export default {
props: {
addBtnStart: {
type: Boolean,
default: false
},
// addBtnStart: {
// type: Boolean,
// default: true
// },
objectId: {
type: String,
default: ''
......@@ -20,33 +20,60 @@ export default {
},
data() {
return {
constant: {}
constant: {},
// addBtnStart: true
}
},
watch: {
addBtnStart: {
handler(newVal) {
console.log(newVal)
},
immediate: true,
deep: true
},
// addBtnStart: {
// handler(newVal) {
// console.log(newVal)
// },
// immediate: true,
// deep: true
// },
objectId: {
handler(newVal) {
constant.tableConfig.initialParams = {
BusinessObjectID: newVal
}
this.constant = constant
},
immediate: true,
deep: true
}
},
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 = {
BusinessObjectID: this.objectId
if (this.$attrs['form-data'] && this.$attrs['form-data'].BusinessObjectID) {
config.tableConfig.initialParams = {
BusinessObjectID: this.$attrs['form-data'].BusinessObjectID,
}
this.constant = constant
} else {
config.tableConfig.url = ''
}
this.constant = config
}
}
</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 = {
// }, scope.row.ID)
// }
// },
ExtCustomerID_SDK: {
ExtAgentID_SDK: {
label: '代理商编码',
type: 'input'
},
......@@ -67,7 +67,7 @@ const tableConfig = {
icon: 'el-icon-edit-outline',
type: 'text'
}
}, i18n.t('table.edit')),
}, '详情'),
// h('el-button', {
// on: {
// click: (e) => listeners.handleTakeEffect(scope.row, 'takeEffect')
......
......@@ -21,6 +21,7 @@
v-bind="tableConfig"
:expand-params="expandParams"
:listeners="tableListeners"
:initialParams="initialParams"
@handleSelectionChange="handleSelectionChange"
/>
</div>
......@@ -38,26 +39,28 @@ export default {
return {
expandParams: {}, // 筛选条件
tableListeners: {}, // 事件监听对象,供ele-table内部调用
tableConfig: constant
tableConfig: constant,
initialParams: {
extCustomerType_SDK: "121"
}
}
},
created() {
this.tableListeners = {
// handleDetails: this.handleDetails, // 添加
// handleTakeEffect: this.handleTakeEffect, // 生效
handleEdit: this.handleEdit, // 编辑
// handleInvalid: this.handleInvalid // 失效
handleEdit: this.handleEdit, // 详情
}
},
methods: {
// 编辑
handleEdit() {
console.log("编辑")
handleEdit(row) {
console.log(row)
this.$router.push({ path: '/CustomersOverview-detail',query: { objectID: row.ObjectID}})
},
// 添加
handleAdd() {
this.$router.push({ path: '/customersAdd' })
}
},
handleSelectionChange() {}
}
}
</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 = {
}, scope.row.ID)
}
},
ExtProductGroup_SDK: {
label: '签约产品组',
showInSearch: true,
type: 'select',
fixed: 'left',
isOptions:'true',
options: async data => {
const res = await searchProduct({code:'ExtProductGroup_SDK',module:'Customer'})
var result = res.map(item => {
return {
text: item.content,
value: item.keyword
}
})
return result
},
},
// ExtProductGroup_SDK: {
// label: '签约产品组',
// showInSearch: true,
// type: 'select',
// fixed: 'left',
// isOptions:'true',
// options: async data => {
// const res = await searchProduct({code:'ExtProductGroup_SDK',module:'Customer'})
// var result = res.map(item => {
// return {
// text: item.content,
// value: item.keyword
// }
// })
// return result
// },
// },
},
columns: {
ExtCustomerID_SDK: {
ExtAgentID_SDK: {
label: '代理商编码',
type: 'input'
},
......
......@@ -11,7 +11,6 @@
<ele-table
ref="eleTable"
v-bind="tableConfig"
:expand-params="expandParams"
:listeners="tableListeners"
/>
......@@ -27,7 +26,6 @@ export default {
inject: ['reload'],
data() {
return {
expandParams: {}, // 筛选条件
tableListeners: {}, // 事件监听对象,供ele-table内部调用
tableConfig: constant
}
......@@ -43,7 +41,12 @@ export default {
methods: {
// 编辑
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>
<div class="dashboard-editor-container">
<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>
<h2>首页</h2>
</div>
</template>
<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 {
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) {
.chart-wrapper {
padding: 8px;
}
}
<style>
.two-column {
display: flex;
justify-content: space-between;
margin-bottom: 30px;
> div {
width: 49%;
background-color: #fff;
}
}
</style>
\ No newline at end of file
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