修改界面样式,新增部分功能,20241120合并

main
于阔 9 months ago
parent f0307e8cbf
commit d9d3291fb1

@ -2,7 +2,7 @@
NODE_ENV=production
# 接口前缀-用于2.0系统尝试1
VITE_API_BASE_PATH=dev
VITE_API_BASE_PATH=pro
# 打包路径
VITE_BASE_PATH=./

@ -5,7 +5,7 @@ NODE_ENV=production
VITE_API_BASE_PATH=pro
# 打包路径
VITE_BASE_PATH=./
VITE_BASE_PATH=/index1
# 是否删除debugger
VITE_DROP_DEBUGGER=true
@ -20,7 +20,7 @@ VITE_SOURCEMAP=false
VITE_OUT_DIR=dist-pro
# 标题
VITE_APP_TITLE=东方国信
VITE_APP_TITLE=指标管理
# 是否使用在线图标
VITE_USE_ONLINE_ICON=false

@ -1,18 +0,0 @@
import { createProdMockServer } from 'vite-plugin-mock/es/createProdMockServer'
const modules = import.meta.glob('./**/*.ts', {
import: 'default',
eager: true
})
const mockModules: any[] = []
Object.keys(modules).forEach(async (key) => {
if (key.includes('_')) {
return
}
mockModules.push(...(modules[key] as any))
})
export function setupProdMockServer() {
createProdMockServer(mockModules)
}

@ -1,89 +0,0 @@
import config from '@/config/axios/config'
import { MockMethod } from 'vite-plugin-mock'
const { code } = config
const timeout = 1000
export default [
// 分析页统计接口
{
url: '/analysis/total',
method: 'get',
timeout,
response: () => {
return {
code: code,
data: {
users: 102400,
messages: 81212,
moneys: 9280,
shoppings: 13600
}
}
}
},
// 用户来源
{
url: '/analysis/userAccessSource',
method: 'get',
timeout,
response: () => {
return {
code: code,
data: [
{ value: 1000, name: 'analysis.directAccess' },
{ value: 310, name: 'analysis.mailMarketing' },
{ value: 234, name: 'analysis.allianceAdvertising' },
{ value: 135, name: 'analysis.videoAdvertising' },
{ value: 1548, name: 'analysis.searchEngines' }
]
}
}
},
// 每周用户活跃量
{
url: '/analysis/weeklyUserActivity',
method: 'get',
timeout,
response: () => {
return {
code: code,
data: [
{ value: 13253, name: 'analysis.monday' },
{ value: 34235, name: 'analysis.tuesday' },
{ value: 26321, name: 'analysis.wednesday' },
{ value: 12340, name: 'analysis.thursday' },
{ value: 24643, name: 'analysis.friday' },
{ value: 1322, name: 'analysis.saturday' },
{ value: 1324, name: 'analysis.sunday' }
]
}
}
},
// 每月销售额
{
url: '/analysis/monthlySales',
method: 'get',
timeout,
response: () => {
return {
code: code,
data: [
{ estimate: 100, actual: 120, name: 'analysis.january' },
{ estimate: 120, actual: 82, name: 'analysis.february' },
{ estimate: 161, actual: 91, name: 'analysis.march' },
{ estimate: 134, actual: 154, name: 'analysis.april' },
{ estimate: 105, actual: 162, name: 'analysis.may' },
{ estimate: 160, actual: 140, name: 'analysis.june' },
{ estimate: 165, actual: 145, name: 'analysis.july' },
{ estimate: 114, actual: 250, name: 'analysis.august' },
{ estimate: 163, actual: 134, name: 'analysis.september' },
{ estimate: 185, actual: 56, name: 'analysis.october' },
{ estimate: 118, actual: 99, name: 'analysis.november' },
{ estimate: 123, actual: 123, name: 'analysis.december' }
]
}
}
}
] as MockMethod[]

@ -1,205 +0,0 @@
import config from '@/config/axios/config'
import { MockMethod } from 'vite-plugin-mock'
import { toAnyString } from '@/utils'
import Mock from 'mockjs'
const { code } = config
const departmentList: any = []
const citys = ['厦门总公司', '北京分公司', '上海分公司', '福州分公司', '深圳分公司', '杭州分公司']
for (let i = 0; i < 5; i++) {
departmentList.push({
// 部门名称
departmentName: citys[i],
id: toAnyString(),
createTime: '@datetime',
// 状态
status: Mock.Random.integer(0, 1),
// 备注
remark: '@cword(10, 15)',
children: [
{
// 部门名称
departmentName: '研发部',
createTime: '@datetime',
// 状态
status: Mock.Random.integer(0, 1),
id: toAnyString(),
remark: '@cword(10, 15)'
},
{
// 部门名称
departmentName: '产品部',
createTime: '@datetime',
// 状态
status: Mock.Random.integer(0, 1),
id: toAnyString(),
remark: '@cword(10, 15)'
},
{
// 部门名称
departmentName: '运营部',
createTime: '@datetime',
// 状态
status: Mock.Random.integer(0, 1),
id: toAnyString(),
remark: '@cword(10, 15)'
},
{
// 部门名称
departmentName: '市场部',
createTime: '@datetime',
// 状态
status: Mock.Random.integer(0, 1),
id: toAnyString(),
remark: '@cword(10, 15)'
},
{
// 部门名称
departmentName: '销售部',
createTime: '@datetime',
// 状态
status: Mock.Random.integer(0, 1),
id: toAnyString(),
remark: '@cword(10, 15)'
},
{
// 部门名称
departmentName: '客服部',
createTime: '@datetime',
// 状态
status: Mock.Random.integer(0, 1),
id: toAnyString(),
remark: '@cword(10, 15)'
}
]
})
}
export default [
// 列表接口
{
url: '/department/list',
method: 'get',
response: () => {
return {
code: code,
data: {
list: departmentList
}
}
}
},
{
url: '/department/table/list',
method: 'get',
response: () => {
return {
code: code,
data: {
list: departmentList,
total: 5
}
}
}
},
{
url: '/department/users',
method: 'get',
timeout: 1000,
response: ({ query }) => {
const { pageSize } = query
// 根据pageSize来创建数据
const mockList: any = []
for (let i = 0; i < pageSize; i++) {
mockList.push(
Mock.mock({
// 用户名
username: '@cname',
// 账号
account: '@first',
// 邮箱
email: '@EMAIL',
// 创建时间
createTime: '@datetime',
// 角色
role: '@first',
// 用户id
id: toAnyString()
})
)
}
return {
code: code,
data: {
total: 100,
list: mockList
}
}
}
},
// 保存接口
{
url: '/department/user/save',
method: 'post',
timeout: 1000,
response: () => {
return {
code: code,
data: 'success'
}
}
},
// 删除接口
{
url: '/department/user/delete',
method: 'post',
response: ({ body }) => {
const ids = body.ids
if (!ids) {
return {
code: 500,
message: '请选择需要删除的数据'
}
} else {
return {
code: code,
data: 'success'
}
}
}
},
// 保存接口
{
url: '/department/save',
method: 'post',
timeout: 1000,
response: () => {
return {
code: code,
data: 'success'
}
}
},
// 删除接口
{
url: '/department/delete',
method: 'post',
response: ({ body }) => {
const ids = body.ids
if (!ids) {
return {
code: 500,
message: '请选择需要删除的数据'
}
} else {
return {
code: code,
data: 'success'
}
}
}
}
] as MockMethod[]

@ -1,63 +0,0 @@
import config from '@/config/axios/config'
import { MockMethod } from 'vite-plugin-mock'
const { code } = config
const timeout = 1000
const dictObj: Recordable = {
importance: [
{
value: 0,
label: 'tableDemo.commonly'
},
{
value: 1,
label: 'tableDemo.good'
},
{
value: 2,
label: 'tableDemo.important'
}
]
}
export default [
// 字典接口
{
url: '/dict/list',
method: 'get',
timeout,
response: () => {
return {
code: code,
data: dictObj
}
}
},
// 获取某个字典
{
url: '/dict/one',
method: 'get',
timeout,
response: () => {
return {
code: code,
data: [
{
label: 'test1',
value: 0
},
{
label: 'test2',
value: 1
},
{
label: 'test3',
value: 2
}
]
}
}
}
] as MockMethod[]

@ -1,265 +0,0 @@
import config from '@/config/axios/config'
import { MockMethod } from 'vite-plugin-mock'
import Mock from 'mockjs'
const { code } = config
const timeout = 1000
export default [
// 列表接口
{
url: '/menu/list',
method: 'get',
timeout,
response: () => {
return {
code: code,
data: {
list: [
{
path: '/dashboard',
component: '#',
redirect: '/dashboard/analysis',
name: 'Dashboard',
status: Mock.Random.integer(0, 1),
id: 1,
title: '首页',
meta: {
title: '首页',
icon: 'ant-design:dashboard-filled',
alwaysShow: true
},
children: [
{
path: 'analysis',
component: 'views/Dashboard/Analysis',
name: 'Analysis',
status: Mock.Random.integer(0, 1),
id: 2,
title: '分析页',
meta: {
title: '分析页',
noCache: true
}
},
{
path: 'workplace',
component: 'views/Dashboard/Workplace',
name: 'Workplace',
status: Mock.Random.integer(0, 1),
id: 3,
title: '工作台',
meta: {
title: '工作台',
noCache: true
}
}
]
},
{
path: '/external-link',
component: '#',
title: '文档',
meta: {
title: '文档',
icon: 'clarity:document-solid'
},
name: 'ExternalLink',
status: Mock.Random.integer(0, 1),
id: 4,
children: [
{
path: 'https://element-plus-admin-doc.cn/',
name: 'DocumentLink',
status: Mock.Random.integer(0, 1),
id: 5,
title: '文档',
meta: {
title: '文档'
}
}
]
},
{
path: '/level',
component: '#',
redirect: '/level/menu1/menu1-1/menu1-1-1',
name: 'Level',
status: Mock.Random.integer(0, 1),
id: 6,
title: '菜单',
meta: {
title: '菜单',
icon: 'carbon:skill-level-advanced'
},
children: [
{
path: 'menu1',
name: 'Menu1',
component: '##',
status: Mock.Random.integer(0, 1),
id: 7,
redirect: '/level/menu1/menu1-1/menu1-1-1',
title: '菜单1',
meta: {
title: '菜单1'
},
children: [
{
path: 'menu1-1',
name: 'Menu11',
component: '##',
status: Mock.Random.integer(0, 1),
id: 8,
redirect: '/level/menu1/menu1-1/menu1-1-1',
title: '菜单1-1',
meta: {
title: '菜单1-1',
alwaysShow: true
},
children: [
{
path: 'menu1-1-1',
name: 'Menu111',
component: 'views/Level/Menu111',
status: Mock.Random.integer(0, 1),
id: 9,
permission: ['edit', 'add', 'delete'],
title: '菜单1-1-1',
meta: {
title: '菜单1-1-1'
}
}
]
},
{
path: 'menu1-2',
name: 'Menu12',
component: 'views/Level/Menu12',
status: Mock.Random.integer(0, 1),
id: 10,
permission: ['edit', 'add', 'delete'],
title: '菜单1-2',
meta: {
title: '菜单1-2'
}
}
]
},
{
path: 'menu2',
name: 'Menu2Demo',
component: 'views/Level/Menu2',
status: Mock.Random.integer(0, 1),
id: 11,
permission: ['edit', 'add', 'delete'],
title: '菜单2',
meta: {
title: '菜单2'
}
}
]
},
{
path: '/example',
component: '#',
redirect: '/example/example-dialog',
name: 'Example',
status: Mock.Random.integer(0, 1),
id: 12,
title: '综合示例',
meta: {
title: '综合示例',
icon: 'ep:management',
alwaysShow: true
},
children: [
{
path: 'example-dialog',
component: 'views/Example/Dialog/ExampleDialog',
name: 'ExampleDialog',
status: Mock.Random.integer(0, 1),
id: 13,
title: '综合示例-弹窗',
permission: ['edit', 'add', 'delete'],
meta: {
title: '综合示例-弹窗',
permission: ['edit', 'add']
}
},
{
path: 'example-page',
component: 'views/Example/Page/ExamplePage',
name: 'ExamplePage',
status: Mock.Random.integer(0, 1),
id: 14,
permission: ['edit', 'add', 'delete'],
title: '综合示例-页面',
meta: {
title: '综合示例-页面',
permission: ['edit', 'add']
}
},
{
path: 'example-add',
component: 'views/Example/Page/ExampleAdd',
name: 'ExampleAdd',
status: Mock.Random.integer(0, 1),
id: 15,
permission: ['edit', 'add', 'delete'],
title: '综合示例-新增',
meta: {
title: '综合示例-新增',
noTagsView: true,
noCache: true,
hidden: true,
showMainRoute: true,
activeMenu: '/example/example-page',
permission: ['delete', 'add']
}
},
{
path: 'example-edit',
component: 'views/Example/Page/ExampleEdit',
name: 'ExampleEdit',
status: Mock.Random.integer(0, 1),
id: 16,
permission: ['edit', 'add', 'delete'],
title: '综合示例-编辑',
meta: {
title: '综合示例-编辑',
noTagsView: true,
noCache: true,
hidden: true,
showMainRoute: true,
activeMenu: '/example/example-page',
permission: ['delete', 'add']
}
},
{
path: 'example-detail',
component: 'views/Example/Page/ExampleDetail',
name: 'ExampleDetail',
status: Mock.Random.integer(0, 1),
id: 17,
permission: ['edit', 'add', 'delete'],
title: '综合示例-详情',
meta: {
title: '综合示例-详情',
noTagsView: true,
noCache: true,
hidden: true,
showMainRoute: true,
activeMenu: '/example/example-page',
permission: ['delete', 'edit']
}
}
]
}
]
}
}
}
}
] as MockMethod[]

@ -1,64 +0,0 @@
import config from '@/config/axios/config'
import { MockMethod } from 'vite-plugin-mock'
const timeout = 600000
const { code } = config
export default [
{
url: '/request/1',
method: 'get',
timeout,
response: () => {
return {
code: code,
data: 'request-1'
}
}
},
{
url: '/request/2',
method: 'get',
timeout,
response: () => {
return {
code: code,
data: 'request-2'
}
}
},
{
url: '/request/3',
method: 'get',
timeout,
response: () => {
return {
code: code,
data: 'request-3'
}
}
},
{
url: '/request/4',
method: 'get',
timeout,
response: () => {
return {
code: code,
data: 'request-4'
}
}
},
{
url: '/request/5',
method: 'get',
timeout,
response: () => {
return {
code: code,
data: 'request-5'
}
}
}
] as MockMethod[]

File diff suppressed because it is too large Load Diff

@ -1,256 +0,0 @@
import config from '@/config/axios/config'
import { MockMethod } from 'vite-plugin-mock'
import { toAnyString } from '@/utils'
import Mock from 'mockjs'
const { code } = config
const timeout = 1000
const count = 100
const baseContent =
'<p>I am testing data, I am testing data.</p><p><img src="https://wpimg.wallstcn.com/4c69009c-0fd4-4153-b112-6cb53d1cf943"></p>'
interface ListProps {
id: string
author: string
title: string
content: string
importance: number
display_time: string
pageviews: number
image_uri: string
}
interface TreeListProps {
id: string
author: string
title: string
content: string
importance: number
display_time: string
pageviews: number
children: TreeListProps[]
}
let List: ListProps[] = []
for (let i = 0; i < count; i++) {
List.push(
Mock.mock({
id: toAnyString(),
// timestamp: +Mock.Random.date('T'),
author: '@first',
title: '@title(5, 10)',
content: baseContent,
importance: '@integer(1, 3)',
display_time: '@datetime',
pageviews: '@integer(100, 500)',
image_uri: Mock.Random.image('@integer(100, 500)x@integer(100, 500)')
})
)
}
const treeList: TreeListProps[] = []
for (let i = 0; i < count; i++) {
treeList.push(
Mock.mock({
id: toAnyString(),
// timestamp: +Mock.Random.date('T'),
author: '@first',
title: '@title(5, 10)',
content: baseContent,
importance: '@integer(1, 3)',
display_time: '@datetime',
pageviews: '@integer(300, 5000)',
children: [
{
id: toAnyString(),
// timestamp: +Mock.Random.date('T'),
author: '@first',
title: '@title(5, 10)',
content: baseContent,
importance: '@integer(1, 3)',
display_time: '@datetime',
pageviews: '@integer(300, 5000)',
children: [
{
id: toAnyString(),
// timestamp: +Mock.Random.date('T'),
author: '@first',
title: '@title(5, 10)',
content: baseContent,
importance: '@integer(1, 3)',
display_time: '@datetime',
pageviews: '@integer(300, 5000)'
},
{
id: toAnyString(),
// timestamp: +Mock.Random.date('T'),
author: '@first',
title: '@title(5, 10)',
content: baseContent,
importance: '@integer(1, 3)',
display_time: '@datetime',
pageviews: '@integer(300, 5000)'
}
]
},
{
id: toAnyString(),
// timestamp: +Mock.Random.date('T'),
author: '@first',
title: '@title(5, 10)',
content: baseContent,
importance: '@integer(1, 3)',
display_time: '@datetime',
pageviews: '@integer(300, 5000)'
},
{
id: toAnyString(),
// timestamp: +Mock.Random.date('T'),
author: '@first',
title: '@title(5, 10)',
content: baseContent,
importance: '@integer(1, 3)',
display_time: '@datetime',
pageviews: '@integer(300, 5000)'
},
{
id: toAnyString(),
// timestamp: +Mock.Random.date('T'),
author: '@first',
title: '@title(5, 10)',
content: baseContent,
importance: '@integer(1, 3)',
display_time: '@datetime',
pageviews: '@integer(300, 5000)'
}
]
// image_uri
})
)
}
export default [
// 树形列表接口
{
url: '/example/treeList',
method: 'get',
timeout,
response: ({ query }) => {
const { title, pageIndex, pageSize } = query
const mockList = treeList.filter((item) => {
if (title && item.title.indexOf(title) < 0) return false
return true
})
const pageList = mockList.filter(
(_, index) => index < pageSize * pageIndex && index >= pageSize * (pageIndex - 1)
)
return {
code: code,
data: {
total: mockList.length,
list: pageList
}
}
}
},
// 列表接口
{
url: '/example/list',
method: 'get',
timeout,
response: ({ query }) => {
const { title, pageIndex, pageSize } = query
const mockList = List.filter((item) => {
if (title && item.title.indexOf(title) < 0) return false
return true
})
const pageList = mockList.filter(
(_, index) => index < pageSize * pageIndex && index >= pageSize * (pageIndex - 1)
)
return {
code: code,
data: {
total: mockList.length,
list: pageList
}
}
}
},
// 保存接口
{
url: '/example/save',
method: 'post',
timeout,
response: ({ body }) => {
if (!body.id) {
List = [
Object.assign(body, {
id: toAnyString()
})
].concat(List)
return {
code: code,
data: 'success'
}
} else {
List.map((item) => {
if (item.id === body.id) {
for (const key in item) {
item[key] = body[key]
}
}
})
return {
code: code,
data: 'success'
}
}
}
},
// 详情接口
{
url: '/example/detail',
method: 'get',
response: ({ query }) => {
const { id } = query
for (const example of List) {
if (example.id === id) {
return {
code: code,
data: example
}
}
}
}
},
// 删除接口
{
url: '/example/delete',
method: 'post',
response: ({ body }) => {
const ids = body.ids
if (!ids) {
return {
code: 500,
message: '请选择需要删除的数据'
}
} else {
let i = List.length
while (i--) {
if (ids.indexOf(List[i].id) !== -1) {
List.splice(i, 1)
}
}
return {
code: code,
data: 'success'
}
}
}
}
] as MockMethod[]

@ -1,135 +0,0 @@
import config from '@/config/axios/config'
import { MockMethod } from 'vite-plugin-mock'
const { code } = config
const timeout = 1000
const List: {
username: string
password: string
role: string
roleId: string
permissions: string | string[]
}[] = [
{
username: 'admin',
password: 'o9%2B2oAvFf9DHDj1yBTJHhw%3D%3D',
role: 'admin',
roleId: '1',
permissions: ['*.*.*']
},
{
username: 'test',
password: 'test',
role: 'test',
roleId: '2',
permissions: ['example:dialog:create', 'example:dialog:delete']
}
]
export default [
// 列表接口
{
url: '/user/list',
method: 'get',
response: ({ query }) => {
const { username, pageIndex, pageSize } = query
const mockList = List.filter((item) => {
if (username && item.username.indexOf(username) < 0) return false
return true
})
const pageList = mockList.filter(
(_, index) => index < pageSize * pageIndex && index >= pageSize * (pageIndex - 1)
)
return {
code: code,
data: {
total: mockList.length,
list: pageList
}
}
}
},
// 登录接口
{
url: '/user/login',
method: 'post',
timeout,
response: ({ body }) => {
const data = body
let hasUser = false
for (const user of List) {
if (user.username === data.username && user.password === data.password) {
hasUser = true
return {
code: code,
data: user
}
}
}
if (!hasUser) {
return {
code: 500,
message: '账号或密码错误'
}
}
}
},
{
url: '/mobile/login',
method: 'post',
timeout,
response: ({ body }) => {
debugger
const data = body
let hasUser = false
for (const user of List) {
if (user.username === data.username && user.password === data.password) {
hasUser = true
return {
code: code,
data: user
}
}
}
return {
code: code,
data: {
code: 1
}
}
if (!hasUser) {
return {
code: 500,
message: '账号或密码错误'
}
}
}
},
// 退出接口
{
url: '/user/loginOut',
method: 'get',
timeout,
response: () => {
return {
code: code,
data: null
}
}
},
{
url: '/mobile/logout',
method: 'get',
timeout,
response: () => {
return {
code: code,
data: null
}
}
}
] as MockMethod[]

@ -1,172 +0,0 @@
import config from '@/config/axios/config'
import { MockMethod } from 'vite-plugin-mock'
const { code } = config
const timeout = 1000
export default [
// 获取统计
{
url: '/workplace/total',
method: 'get',
timeout,
response: () => {
return {
code: code,
data: {
project: 40,
access: 2340,
todo: 10
}
}
}
},
// 获取项目
{
url: '/workplace/project',
method: 'get',
timeout,
response: () => {
return {
code: code,
data: [
{
name: 'Github',
icon: 'akar-icons:github-fill',
message: 'workplace.introduction',
personal: 'Archer',
time: new Date()
},
{
name: 'Vue',
icon: 'logos:vue',
message: 'workplace.introduction',
personal: 'Archer',
time: new Date()
},
{
name: 'Angular',
icon: 'logos:angular-icon',
message: 'workplace.introduction',
personal: 'Archer',
time: new Date()
},
{
name: 'React',
icon: 'logos:react',
message: 'workplace.introduction',
personal: 'Archer',
time: new Date()
},
{
name: 'Webpack',
icon: 'logos:webpack',
message: 'workplace.introduction',
personal: 'Archer',
time: new Date()
},
{
name: 'Vite',
icon: 'vscode-icons:file-type-vite',
message: 'workplace.introduction',
personal: 'Archer',
time: new Date()
}
]
}
}
},
// 获取动态
{
url: '/workplace/dynamic',
method: 'get',
timeout,
response: () => {
return {
code: code,
data: [
{
keys: ['workplace.push', 'Github'],
time: new Date()
},
{
keys: ['workplace.push', 'Github'],
time: new Date()
},
{
keys: ['workplace.push', 'Github'],
time: new Date()
},
{
keys: ['workplace.push', 'Github'],
time: new Date()
},
{
keys: ['workplace.push', 'Github'],
time: new Date()
},
{
keys: ['workplace.push', 'Github'],
time: new Date()
}
]
}
}
},
// 获取团队信息
{
url: '/workplace/team',
method: 'get',
timeout,
response: () => {
return {
code: code,
data: [
{
name: 'Github',
icon: 'akar-icons:github-fill'
},
{
name: 'Vue',
icon: 'logos:vue'
},
{
name: 'Angular',
icon: 'logos:angular-icon'
},
{
name: 'React',
icon: 'logos:react'
},
{
name: 'Webpack',
icon: 'logos:webpack'
},
{
name: 'Vite',
icon: 'vscode-icons:file-type-vite'
}
]
}
}
},
// 获取指数
{
url: '/workplace/radar',
method: 'get',
timeout,
response: () => {
return {
code: code,
data: [
{ name: 'workplace.quote', max: 65, personal: 42, team: 50 },
{ name: 'workplace.contribution', max: 160, personal: 30, team: 140 },
{ name: 'workplace.hot', max: 300, personal: 20, team: 28 },
{ name: 'workplace.yield', max: 130, personal: 35, team: 35 },
{ name: 'workplace.follow', max: 100, personal: 80, team: 90 }
]
}
}
}
] as MockMethod[]

@ -104,10 +104,10 @@ watch(
(ruleInfo) => {
if (!ruleInfo) return
sqlInfo = Object.assign(sqlInfo,ruleInfo);
if(editorInstance){
const model = editorInstance.getModel();
model.setValue(sqlInfo.ruleSql);
}
// if(editorInstance){
// const model = editorInstance.getModel();
// model.setValue(sqlInfo.ruleSql);
// }
},
{
deep: true,
@ -118,7 +118,7 @@ watch(
const formatterSql = ()=>{
const model = editorInstance.getModel();
if (model) {
const formattedSql = format(model.getValue());
const formattedSql = format(editorInstance.getValue());
model.setValue(formattedSql);
}
}
@ -135,11 +135,13 @@ const submit = async () =>{
return false;
}
const model = editorInstance.getModel();
console.log(model.getValue(),"sql的信息");
if(!model.getValue()){
ElMessage.warning('请输入SQL语句');
return false;
}
sqlInfo.ruleSql = model.getValue();
return sqlInfo
}
defineExpose({

@ -47,11 +47,14 @@
setParamsSubmit.ruleJson = JSON.stringify(setParamsSubmit.ruleJson);
}
let paramsList = Object.assign(basicInfoSubmit,setParamsSubmit,procedureConfigSubmit,{ruleClass:'SqlRule'});
if(props.currentRow){
if(typeof paramsList.ruleJson != 'string'){
paramsList.ruleJson = JSON.stringify(paramsList.ruleJson);
}
if(props.currentRow){//
paramsList.itemId = props.currentRow.code;
paramsList.itemName = props.currentRow.itemName;
}
console.log(paramsList,props.currentRow);
saveRepSetRuleApi(paramsList).then(res=>{
loading.value = false;
if(res.head.code == '0'){
@ -72,7 +75,7 @@
<ContentWrap v-loading="loading">
<ElTabs tab-position="left" style="height:400px;overflow: hidden;">
<ElTabPane label="SQL">
<ProcedureConfig ref="procedureConfig" rule-type="SqlRule" :rule-info="props.ruleInfo" />
<ProcedureConfig ref="procedureConfig" rule-type="SqlRule" :rule-info="{dataSourceId:props.ruleInfo.dataSourceId,ruleSql:props.ruleInfo.ruleSql}" />
</ElTabPane>
<ElTabPane label="参数配置">
<SetParams ref="setParams" :rule-info="props.ruleInfo" />

@ -28,11 +28,10 @@ import RepSetRuleWrite from '@/views/dataset/RepSetRule/components/Write.vue'
import { RULE_TYPE_LIST } from '@/views/IndexProcess/constants'
import { getIndexType } from '@/api/dataset/RepIndexSet'
import { transfDictList } from '@/utils';
import { Alignment } from 'element-plus/es/components/table-v2/src/constants'
const route = useRoute();
const pageQuery = ref(route || null);
const indexsetCode = pageQuery.value?.query?.indexsetCode;
let indexsetCode = pageQuery.value?.query?.indexsetCode;
let indexType_param_LIST = ref([]);
let indexCalType_param_LIST = ref([]);
let indexDataType_param_LIST = ref([]);
@ -67,6 +66,10 @@ const { tableRegister, tableState, tableMethods } = useTable({
pageSize: unref(pageSize),
...unref(searchParams)
})
if(res.body.list && res.body.list.length !=0 && !indexsetCode){
//indexSet
indexsetCode = res.body.list[0].indexsetCode;
}
return {
list: res.body.list,
total: res.body.total
@ -282,11 +285,12 @@ const save = async () => {
if (formData) {
saveLoading.value = true
const res = await saveCodeRepItemApi(formData)
.catch(() => {})
.catch(() => {ElMessage.warning('保存失败');})
.finally(() => {
saveLoading.value = false
})
if (res) {
ElMessage.success(res.head.code == '0'?'保存成功':res.head.msg);
dialogVisible.value = false
currentPage.value = 1
getList()

@ -27,7 +27,7 @@ import {useRoute} from "vue-router"
const route = useRoute();
const pageQuery = ref(route || null);
const indexsetCode = pageQuery.value?.query?.indexsetCode;
let indexsetCode = pageQuery.value?.query?.indexsetCode;
const { t } = useI18n()
@ -41,6 +41,10 @@ const { tableRegister, tableState, tableMethods } = useTable({
pageSize: unref(pageSize),
...unref(searchParams)
})
if(res.body.list && res.body.list.length !=0 && !indexsetCode){
//indexSet
indexsetCode = res.body.list[0].indexsetCode;
}
return {
list: res.body.list,
total: res.body.total
@ -85,7 +89,7 @@ const tableColumns = reactive<TableColumn[]>([
{
field: 'action',
label: t('tableDemo.action'),
width: 160,
width: 120,
fixed: 'right',
slots: {
default: (data: any) => {
@ -176,7 +180,7 @@ const action = async (row: TableData, type: string) => {
const AddAction = () => {
dialogTitle.value = t('tableDemo.add')
currentRow.value = undefined
currentRow.value = {indexsetCode:indexsetCode}
dialogVisible.value = true
actionType.value = 'add'
}
@ -189,11 +193,12 @@ const save = async () => {
if (formData) {
saveLoading.value = true
const res = await saveCodeRepTargetApi(formData)
.catch(() => {})
.catch(() => {ElMessage.warning('保存失败');})
.finally(() => {
saveLoading.value = false
})
if (res) {
ElMessage.success('保存成功');
dialogVisible.value = false
currentPage.value = 1
getList()

@ -32,7 +32,7 @@ const formSchema = reactive<FormSchema[]>([
label: '指标集代码',
component: 'Input',
componentProps: {
disabled:props.actionType == 'edit'
disabled:true
},
},
{

@ -144,7 +144,7 @@ const tableColumns = reactive<TableColumn[]>([
{
field: 'action',
label: t('tableDemo.action'),
width:160,
width:80,
slots: {
default: (data: any) => {
return (

@ -75,18 +75,13 @@ const { getList, getElTableExpose, delList, refresh } = tableMethods
const tableColumns = reactive<TableColumn[]>([
{
field: 'selection',
type: 'selection',
fixed: true
field: 'organName',
label: '机构名称'
},
{
field: 'paramDate',
label: '数据日期'
},
{
field: 'organName',
label: '机构名称'
},
{
field: 'paramDate',
label: '数据日期'
},
{
field: 'indexSetCode',
label: '指标集代码',
@ -117,10 +112,10 @@ const tableColumns = reactive<TableColumn[]>([
field: 'frequency',
label: '频度',
slots:{
default:(data)=>{
return <span>{data.row.frequency?frequency_param_LIST.value[data.row.frequency]?.label:''}</span>
}
}
default:(data)=>{
return <span>{data.row.frequency?frequency_param_LIST.value[data.row.frequency]?.label:''}</span>
}
}
},
{
field: 'indexValue',

@ -280,11 +280,12 @@ const save = async () => {
if (formData) {
saveLoading.value = true
const res = await saveRepIndexSetApi(formData)
.catch(() => {})
.catch(() => {ElMessage.warning('保存失败');})
.finally(() => {
saveLoading.value = false
})
if (res) {
ElMessage.success(res.head.code == '0'?'保存成功':res.head.msg);
dialogVisible.value = false
currentPage.value = 1
getList()

@ -5,6 +5,9 @@ import { PropType, reactive, watch } from 'vue'
import { useValidator } from '@/hooks/web/useValidator'
import { getIndexType } from '@/api/dataset/RepIndexSet';
import { transfDictList } from '@/utils';
import {
getRepDataModelListApi,
} from '@/api/dataset/RepDataModel'
const { required } = useValidator()
@ -95,23 +98,34 @@ const formSchema = reactive<FormSchema[]>([
filterable: true,
// multiple: true,
collapseTags: true,
showCheckbox: true,
// showCheckbox: true,
style:{width:'100%'},
checkOnClickNode: true,
// checkOnClickNode: true,
},
component: 'TreeSelect',
optionApi: async () => {
return props.indexTypeParam;
}
},
{
field: 'modelCode',
label: '数据模型编码',
component: 'Input',
component: 'Select',
componentProps: {
},
optionApi:async ()=>{
let res = await getRepDataModelListApi({}).then(item=>{
return item.body.list;
});
res = res.map(item=>{
return {
label:item.modelCode,
value:item.modelCode
}
})
return res;
}
},
{
field: 'createOrgan',

@ -328,9 +328,8 @@ const exportExcel = async () => {
</ElDropdownMenu>
</template>
</ElDropdown> -->
<Upload :url="importExcelApiUrl" :callback="getList"> <ElButton type="primary">导入</ElButton> </Upload>
<ElButton type="primary" @click="exportExcel()"></ElButton>
<!-- <ElButton type="primary" @click="exportExcel()"></ElButton> -->
</template>
</Table>
</ContentWrap>

@ -278,7 +278,7 @@ const onSelectionChange = (selection: TableData[]) => {
/** 导出Excel */
const exportExcel = async () => {
const data = { ...unref(searchParams),fileName:'模型映射' }
const data = { ...unref(searchParams),fileName:'模型映射.xls' }
await exportExcelApi(data)
}
</script>
@ -304,7 +304,7 @@ const exportExcel = async () => {
<template #buttons>
<ElButton type="primary" @click="AddAction">{{ t('tableDemo.add') }}</ElButton>
<Upload :url="importExcelApiUrl" :callback="getList"> <ElButton type="primary">导入</ElButton> </Upload>
<ElButton type="primary" @click="exportExcel()"></ElButton>
<!-- <ElButton type="primary" @click="exportExcel()"></ElButton> -->
</template>
</Table>
</ContentWrap>

@ -259,7 +259,7 @@ const exportExcel = async () => {
<template #buttons>
<ElButton type="primary" @click="AddAction">{{ t('tableDemo.add') }}</ElButton>
<Upload :url="importExcelApiUrl" :callback="getList"> <ElButton type="primary">导入</ElButton> </Upload>
<ElButton type="primary" @click="exportExcel()"></ElButton>
<!-- <ElButton type="primary" @click="exportExcel()"></ElButton> -->
</template>
</Table>
</ContentWrap>

@ -58,11 +58,6 @@ const { loading, dataList, total, currentPage, pageSize } = tableState
const { getList, getElTableExpose, delList, refresh } = tableMethods
const tableColumns = reactive<TableColumn[]>([
{
field: 'selection',
type: 'selection',
fixed: true
},
{
field: 'tName',
label: '名称',

@ -47,11 +47,6 @@ const { loading, dataList, total, currentPage, pageSize } = tableState
const { getList, getElTableExpose, delList, refresh } = tableMethods
const tableColumns = reactive<TableColumn[]>([
{
field: 'selection',
type: 'selection',
fixed: true
},
{
field: 'repCode',
label: '报告编码'

@ -111,19 +111,22 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
proxy: {
// 选项写法
'/api': {
target: 'http://localhost:8082/srdb',
// target: 'http://172.16.87.114:8095/ordb',
// target: 'http://localhost:8082/srdb',
target: 'http://172.16.87.114:8095/ordb',
// target: 'http://10.57.52.34:8095/ordb',
changeOrigin: true,
rewrite: path => path.replace(/^\/api/, '')
},
'/pro': {
target: 'http://localhost:8082/srdb',
// target: 'http://172.16.87.114:8095/ordb',
// target: 'http://localhost:8082/srdb',
target: 'http://172.16.87.114:8095/ordb',
// target: 'http://10.57.52.34:8095/ordb',
changeOrigin: true,
rewrite: path => path.replace(/^\/pro/, '')
},
'/dev': {
target: 'http://172.16.87.114:8095/ordb',
// target: 'http://10.57.52.34:8095/ordb',
changeOrigin: true,
rewrite: path => path.replace(/^\/dev/, '')
},

Loading…
Cancel
Save