补充修改
This commit is contained in:
parent
f1c2a6ef37
commit
b7ec0eef6d
10
.vscode/launch.json
vendored
10
.vscode/launch.json
vendored
@ -1,12 +1,16 @@
|
|||||||
{
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"configurations": [
|
"configurations": [
|
||||||
{
|
{
|
||||||
"name": "Launch debug",
|
"type": "msedge",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"type": "chrome",
|
"name": "Launch Edge against localhost",
|
||||||
"url": "http://localhost",
|
"url": "http://localhost",
|
||||||
"webRoot": "${workspaceFolder}/src"
|
"webRoot": "${workspaceFolder}/src",
|
||||||
|
"sourceMaps": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import progress from 'vite-plugin-progress'
|
|||||||
import EslintPlugin from 'vite-plugin-eslint'
|
import EslintPlugin from 'vite-plugin-eslint'
|
||||||
import PurgeIcons from 'vite-plugin-purge-icons'
|
import PurgeIcons from 'vite-plugin-purge-icons'
|
||||||
import { ViteEjsPlugin } from 'vite-plugin-ejs'
|
import { ViteEjsPlugin } from 'vite-plugin-ejs'
|
||||||
|
// @ts-ignore
|
||||||
import ElementPlus from 'unplugin-element-plus/vite'
|
import ElementPlus from 'unplugin-element-plus/vite'
|
||||||
import AutoImport from 'unplugin-auto-import/vite'
|
import AutoImport from 'unplugin-auto-import/vite'
|
||||||
import Components from 'unplugin-vue-components/vite'
|
import Components from 'unplugin-vue-components/vite'
|
||||||
@ -17,10 +18,12 @@ import UnoCSS from 'unocss/vite'
|
|||||||
|
|
||||||
export function createVitePlugins() {
|
export function createVitePlugins() {
|
||||||
const root = process.cwd()
|
const root = process.cwd()
|
||||||
|
|
||||||
// 路径查找
|
// 路径查找
|
||||||
function pathResolve(dir: string) {
|
function pathResolve(dir: string) {
|
||||||
return resolve(root, '.', dir)
|
return resolve(root, '.', dir)
|
||||||
}
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
Vue(),
|
Vue(),
|
||||||
VueJsx(),
|
VueJsx(),
|
||||||
|
@ -17,7 +17,6 @@ const include = [
|
|||||||
'cropperjs',
|
'cropperjs',
|
||||||
'lodash-es',
|
'lodash-es',
|
||||||
'nprogress',
|
'nprogress',
|
||||||
'animate.css',
|
|
||||||
'vxe-table',
|
'vxe-table',
|
||||||
'vxe-table/es/style',
|
'vxe-table/es/style',
|
||||||
'vxe-table/lib/locale/lang/zh-CN',
|
'vxe-table/lib/locale/lang/zh-CN',
|
||||||
|
@ -49,7 +49,7 @@ export const getReturnList = async (params) => {
|
|||||||
|
|
||||||
// 回退
|
// 回退
|
||||||
export const returnTask = async (data) => {
|
export const returnTask = async (data) => {
|
||||||
return await request.put({ url: '/bpm/task/rollback', data })
|
return await request.put({ url: '/bpm/task/return', data })
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,22 +1,12 @@
|
|||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
|
|
||||||
export interface DataSourceConfigVO {
|
export interface DataSourceConfigVO {
|
||||||
id: number
|
id: number | undefined
|
||||||
name: string
|
name: string
|
||||||
url: string
|
url: string
|
||||||
username: string
|
username: string
|
||||||
password: string
|
password: string
|
||||||
createTime: Date
|
createTime?: Date
|
||||||
}
|
|
||||||
|
|
||||||
// 查询数据源配置列表
|
|
||||||
export const getDataSourceConfigListApi = () => {
|
|
||||||
return request.get({ url: '/infra/data-source-config/list' })
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询数据源配置详情
|
|
||||||
export const getDataSourceConfigApi = (id: number) => {
|
|
||||||
return request.get({ url: '/infra/data-source-config/get?id=' + id })
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 新增数据源配置
|
// 新增数据源配置
|
||||||
@ -33,3 +23,13 @@ export const updateDataSourceConfigApi = (data: DataSourceConfigVO) => {
|
|||||||
export const deleteDataSourceConfigApi = (id: number) => {
|
export const deleteDataSourceConfigApi = (id: number) => {
|
||||||
return request.delete({ url: '/infra/data-source-config/delete?id=' + id })
|
return request.delete({ url: '/infra/data-source-config/delete?id=' + id })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 查询数据源配置列表
|
||||||
|
export const getDataSourceConfigListApi = () => {
|
||||||
|
return request.get({ url: '/infra/data-source-config/list' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询数据源配置详情
|
||||||
|
export const getDataSourceConfigApi = (id: number) => {
|
||||||
|
return request.get({ url: '/infra/data-source-config/get?id=' + id })
|
||||||
|
}
|
||||||
|
@ -13,6 +13,7 @@ export interface FileClientConfig {
|
|||||||
accessSecret?: string
|
accessSecret?: string
|
||||||
domain: string
|
domain: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface FileConfigVO {
|
export interface FileConfigVO {
|
||||||
id: number
|
id: number
|
||||||
name: string
|
name: string
|
||||||
|
@ -6,36 +6,3 @@ import request from '@/config/axios'
|
|||||||
export const getCacheApi = () => {
|
export const getCacheApi = () => {
|
||||||
return request.get({ url: '/infra/redis/get-monitor-info' })
|
return request.get({ url: '/infra/redis/get-monitor-info' })
|
||||||
}
|
}
|
||||||
// 获取模块
|
|
||||||
export const getKeyDefineListApi = () => {
|
|
||||||
return request.get({ url: '/infra/redis/get-key-define-list' })
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* 获取redis key列表
|
|
||||||
*/
|
|
||||||
export const getKeyListApi = (keyTemplate: string) => {
|
|
||||||
return request.get({
|
|
||||||
url: '/infra/redis/get-key-list',
|
|
||||||
params: {
|
|
||||||
keyTemplate
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
// 获取缓存内容
|
|
||||||
export const getKeyValueApi = (key: string) => {
|
|
||||||
return request.get({ url: '/infra/redis/get-key-value?key=' + key })
|
|
||||||
}
|
|
||||||
|
|
||||||
// 根据键名删除缓存
|
|
||||||
export const deleteKeyApi = (key: string) => {
|
|
||||||
return request.delete({ url: '/infra/redis/delete-key?key=' + key })
|
|
||||||
}
|
|
||||||
|
|
||||||
export const deleteKeysApi = (keyTemplate: string) => {
|
|
||||||
return request.delete({
|
|
||||||
url: '/infra/redis/delete-keys?',
|
|
||||||
params: {
|
|
||||||
keyTemplate
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
@ -174,12 +174,3 @@ export interface RedisCommandStatsVO {
|
|||||||
calls: number
|
calls: number
|
||||||
usec: number
|
usec: number
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface RedisKeyInfo {
|
|
||||||
keyTemplate: string
|
|
||||||
keyType: string
|
|
||||||
valueType: string
|
|
||||||
timeoutType: number
|
|
||||||
timeout: number
|
|
||||||
memo: string
|
|
||||||
}
|
|
||||||
|
@ -20,8 +20,8 @@ export interface Sku {
|
|||||||
stock?: number // 库存
|
stock?: number // 库存
|
||||||
weight?: number // 商品重量,单位:kg 千克
|
weight?: number // 商品重量,单位:kg 千克
|
||||||
volume?: number // 商品体积,单位:m^3 平米
|
volume?: number // 商品体积,单位:m^3 平米
|
||||||
firstBrokerageRecord?: number | string // 一级分销的佣金
|
firstBrokeragePrice?: number | string // 一级分销的佣金
|
||||||
secondBrokerageRecord?: number | string // 二级分销的佣金
|
secondBrokeragePrice?: number | string // 二级分销的佣金
|
||||||
salesCount?: number // 商品销量
|
salesCount?: number // 商品销量
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ import request from '@/config/axios'
|
|||||||
import type { DictDataVO, DictDataPageReqVO, DictDataExportReqVO } from './types'
|
import type { DictDataVO, DictDataPageReqVO, DictDataExportReqVO } from './types'
|
||||||
|
|
||||||
// 查询字典数据(精简)列表
|
// 查询字典数据(精简)列表
|
||||||
export const listSimpleDictDataApi = () => {
|
export const getSimpleDictDataList = () => {
|
||||||
return request.get({ url: '/system/dict-data/simple-list' })
|
return request.get({ url: '/system/dict-data/simple-list' })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
|
|
||||||
export interface ErrorCodeVO {
|
export interface ErrorCodeVO {
|
||||||
id: number
|
id: number | undefined
|
||||||
type: number
|
type: number
|
||||||
applicationName: string
|
applicationName: string
|
||||||
code: number
|
code: number | undefined
|
||||||
message: string
|
message: string
|
||||||
memo: string
|
memo: string
|
||||||
createTime: Date
|
createTime: Date
|
||||||
|
@ -25,6 +25,7 @@ export interface LoginLogReqVO extends PageParam {
|
|||||||
export const getLoginLogPageApi = (params: LoginLogReqVO) => {
|
export const getLoginLogPageApi = (params: LoginLogReqVO) => {
|
||||||
return request.get({ url: '/system/login-log/page', params })
|
return request.get({ url: '/system/login-log/page', params })
|
||||||
}
|
}
|
||||||
|
|
||||||
// 导出登录日志
|
// 导出登录日志
|
||||||
export const exportLoginLogApi = (params: LoginLogReqVO) => {
|
export const exportLoginLogApi = (params: LoginLogReqVO) => {
|
||||||
return request.download({ url: '/system/login-log/export', params })
|
return request.download({ url: '/system/login-log/export', params })
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
|
|
||||||
export interface NotifyTemplateVO {
|
export interface NotifyTemplateVO {
|
||||||
id: number
|
id?: number
|
||||||
name: string
|
name: string
|
||||||
|
nickname: string
|
||||||
code: string
|
code: string
|
||||||
content: string
|
content: string
|
||||||
type?: number
|
type?: number
|
||||||
@ -19,7 +20,7 @@ export interface NotifyTemplatePageReqVO extends PageParam {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface NotifySendReqVO {
|
export interface NotifySendReqVO {
|
||||||
userId: number
|
userId: number | null
|
||||||
templateCode: string
|
templateCode: string
|
||||||
templateParams: Map<String, Object>
|
templateParams: Map<String, Object>
|
||||||
}
|
}
|
||||||
|
@ -30,17 +30,17 @@ export const getOAuth2ClientPageApi = (params: OAuth2ClientPageReqVO) => {
|
|||||||
return request.get({ url: '/system/oauth2-client/page', params })
|
return request.get({ url: '/system/oauth2-client/page', params })
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询 OAuth2详情
|
// 查询 OAuth2 客户端的详情
|
||||||
export const getOAuth2ClientApi = (id: number) => {
|
export const getOAuth2ClientApi = (id: number) => {
|
||||||
return request.get({ url: '/system/oauth2-client/get?id=' + id })
|
return request.get({ url: '/system/oauth2-client/get?id=' + id })
|
||||||
}
|
}
|
||||||
|
|
||||||
// 新增 OAuth2
|
// 新增 OAuth2 客户端
|
||||||
export const createOAuth2ClientApi = (data: OAuth2ClientVO) => {
|
export const createOAuth2ClientApi = (data: OAuth2ClientVO) => {
|
||||||
return request.post({ url: '/system/oauth2-client/create', data })
|
return request.post({ url: '/system/oauth2-client/create', data })
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修改 OAuth2
|
// 修改 OAuth2 客户端
|
||||||
export const updateOAuth2ClientApi = (data: OAuth2ClientVO) => {
|
export const updateOAuth2ClientApi = (data: OAuth2ClientVO) => {
|
||||||
return request.put({ url: '/system/oauth2-client/update', data })
|
return request.put({ url: '/system/oauth2-client/update', data })
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,8 @@ export interface RoleVO {
|
|||||||
sort: number
|
sort: number
|
||||||
status: number
|
status: number
|
||||||
type: number
|
type: number
|
||||||
|
dataScope: number
|
||||||
|
dataScopeDeptIds: number[]
|
||||||
createTime: Date
|
createTime: Date
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,3 +58,11 @@ export const updateRoleStatusApi = async (data: UpdateStatusReqVO) => {
|
|||||||
export const deleteRoleApi = async (id: number) => {
|
export const deleteRoleApi = async (id: number) => {
|
||||||
return await request.delete({ url: '/system/role/delete?id=' + id })
|
return await request.delete({ url: '/system/role/delete?id=' + id })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 导出角色
|
||||||
|
export const exportRole = (params) => {
|
||||||
|
return request.download({
|
||||||
|
url: '/system/role/export-excel',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
|
import qs from 'qs'
|
||||||
|
|
||||||
export interface SensitiveWordVO {
|
export interface SensitiveWordVO {
|
||||||
id: number
|
id: number
|
||||||
@ -16,11 +17,9 @@ export interface SensitiveWordPageReqVO extends PageParam {
|
|||||||
createTime?: Date[]
|
createTime?: Date[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SensitiveWordExportReqVO {
|
export interface SensitiveWordTestReqVO {
|
||||||
name?: string
|
text: string
|
||||||
tag?: string
|
tag: string[]
|
||||||
status?: number
|
|
||||||
createTime?: Date[]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询敏感词列表
|
// 查询敏感词列表
|
||||||
@ -49,7 +48,7 @@ export const deleteSensitiveWordApi = (id: number) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 导出敏感词
|
// 导出敏感词
|
||||||
export const exportSensitiveWordApi = (params: SensitiveWordExportReqVO) => {
|
export const exportSensitiveWordApi = (params: SensitiveWordPageReqVO) => {
|
||||||
return request.download({ url: '/system/sensitive-word/export-excel', params })
|
return request.download({ url: '/system/sensitive-word/export-excel', params })
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,6 +58,8 @@ export const getSensitiveWordTagsApi = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 获得文本所包含的不合法的敏感词数组
|
// 获得文本所包含的不合法的敏感词数组
|
||||||
export const validateTextApi = (id: number) => {
|
export const validateTextApi = (query: SensitiveWordTestReqVO) => {
|
||||||
return request.get({ url: '/system/sensitive-word/validate-text?' + id })
|
return request.get({
|
||||||
|
url: '/system/sensitive-word/validate-text?' + qs.stringify(query, { arrayFormat: 'repeat' })
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
@ -91,10 +91,10 @@ export const updateUserStatusApi = (id: number, status: number) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 获取用户精简信息列表
|
// 获取用户精简信息列表
|
||||||
export const getListSimpleUsersApi = () => {
|
export const getListSimpleUsersApi = (): Promise<UserVO[]> => {
|
||||||
return request.get({ url: '/system/user/simple-list' })
|
return request.get({ url: '/system/user/simple-list' })
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getSimpleUserList = () => {
|
export const getSimpleUserList = (): Promise<UserVO[]> => {
|
||||||
return request.get({ url: '/system/user/simple-list' })
|
return request.get({ url: '/system/user/simple-list' })
|
||||||
}
|
}
|
||||||
|
@ -196,8 +196,11 @@
|
|||||||
max-height="600px"
|
max-height="600px"
|
||||||
>
|
>
|
||||||
<!-- append-to-body -->
|
<!-- append-to-body -->
|
||||||
<div>
|
<div v-highlight>
|
||||||
<pre><code class="hljs" v-html="highlightedCode(previewResult)"></code></pre>
|
<code class="hljs">
|
||||||
|
<!-- 高亮代码块 -->
|
||||||
|
{{ previewResult }}
|
||||||
|
</code>
|
||||||
</div>
|
</div>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
</div>
|
</div>
|
||||||
@ -233,6 +236,14 @@ import flowableModdleExtension from './plugins/extension-moddle/flowable'
|
|||||||
// import xml2js from 'xml-js'
|
// import xml2js from 'xml-js'
|
||||||
// import xml2js from 'fast-xml-parser'
|
// import xml2js from 'fast-xml-parser'
|
||||||
import { XmlNode, XmlNodeType, parseXmlString } from 'steady-xml'
|
import { XmlNode, XmlNodeType, parseXmlString } from 'steady-xml'
|
||||||
|
// 代码高亮插件
|
||||||
|
// import hljs from 'highlight.js/lib/highlight'
|
||||||
|
// import 'highlight.js/styles/github-gist.css'
|
||||||
|
// hljs.registerLanguage('xml', 'highlight.js/lib/languages/xml')
|
||||||
|
// hljs.registerLanguage('json', 'highlight.js/lib/languages/json')
|
||||||
|
// const eventName = reactive({
|
||||||
|
// name: ''
|
||||||
|
// })
|
||||||
|
|
||||||
defineOptions({ name: 'MyProcessDesigner' })
|
defineOptions({ name: 'MyProcessDesigner' })
|
||||||
|
|
||||||
@ -360,9 +371,9 @@ const additionalModules = computed(() => {
|
|||||||
return Modules
|
return Modules
|
||||||
})
|
})
|
||||||
const moddleExtensions = computed(() => {
|
const moddleExtensions = computed(() => {
|
||||||
// console.log(props.onlyCustomizeModdle, 'props.onlyCustomizeModdle')
|
console.log(props.onlyCustomizeModdle, 'props.onlyCustomizeModdle')
|
||||||
// console.log(props.moddleExtension, 'props.moddleExtension')
|
console.log(props.moddleExtension, 'props.moddleExtension')
|
||||||
// console.log(props.prefix, 'props.prefix')
|
console.log(props.prefix, 'props.prefix')
|
||||||
const Extensions: any = {}
|
const Extensions: any = {}
|
||||||
// 仅使用用户自定义模块
|
// 仅使用用户自定义模块
|
||||||
if (props.onlyCustomizeModdle) {
|
if (props.onlyCustomizeModdle) {
|
||||||
@ -425,22 +436,22 @@ const initBpmnModeler = () => {
|
|||||||
|
|
||||||
// bpmnModeler.createDiagram()
|
// bpmnModeler.createDiagram()
|
||||||
|
|
||||||
// console.log(bpmnModeler, 'bpmnModeler111111')
|
console.log(bpmnModeler, 'bpmnModeler111111')
|
||||||
emit('init-finished', bpmnModeler)
|
emit('init-finished', bpmnModeler)
|
||||||
initModelListeners()
|
initModelListeners()
|
||||||
}
|
}
|
||||||
|
|
||||||
const initModelListeners = () => {
|
const initModelListeners = () => {
|
||||||
const EventBus = bpmnModeler.get('eventBus')
|
const EventBus = bpmnModeler.get('eventBus')
|
||||||
// console.log(EventBus, 'EventBus')
|
console.log(EventBus, 'EventBus')
|
||||||
// 注册需要的监听事件, 将. 替换为 - , 避免解析异常
|
// 注册需要的监听事件, 将. 替换为 - , 避免解析异常
|
||||||
props.events.forEach((event: any) => {
|
props.events.forEach((event: any) => {
|
||||||
EventBus.on(event, function (eventObj) {
|
EventBus.on(event, function (eventObj) {
|
||||||
// let eventName = event.replace(/\./g, '-')
|
let eventName = event.replace(/\./g, '-')
|
||||||
// eventName.name = eventName
|
// eventName.name = eventName
|
||||||
let element = eventObj ? eventObj.element : null
|
let element = eventObj ? eventObj.element : null
|
||||||
// console.log(eventName, 'eventName')
|
console.log(eventName, 'eventName')
|
||||||
// console.log(element, 'element')
|
console.log(element, 'element')
|
||||||
emit('element-click', element, eventObj)
|
emit('element-click', element, eventObj)
|
||||||
// emit(eventName, element, eventObj)
|
// emit(eventName, element, eventObj)
|
||||||
})
|
})
|
||||||
@ -467,7 +478,7 @@ const initModelListeners = () => {
|
|||||||
}
|
}
|
||||||
/* 创建新的流程图 */
|
/* 创建新的流程图 */
|
||||||
const createNewDiagram = async (xml) => {
|
const createNewDiagram = async (xml) => {
|
||||||
// console.log(xml, 'xml')
|
console.log(xml, 'xml')
|
||||||
// 将字符串转换成图显示出来
|
// 将字符串转换成图显示出来
|
||||||
let newId = props.processId || `Process_${new Date().getTime()}`
|
let newId = props.processId || `Process_${new Date().getTime()}`
|
||||||
let newName = props.processName || `业务流程_${new Date().getTime()}`
|
let newName = props.processName || `业务流程_${new Date().getTime()}`
|
||||||
@ -476,7 +487,7 @@ const createNewDiagram = async (xml) => {
|
|||||||
// console.log(xmlString, 'xmlString')
|
// console.log(xmlString, 'xmlString')
|
||||||
// console.log(this.bpmnModeler.importXML);
|
// console.log(this.bpmnModeler.importXML);
|
||||||
let { warnings } = await bpmnModeler.importXML(xmlString)
|
let { warnings } = await bpmnModeler.importXML(xmlString)
|
||||||
// console.log(warnings, 'warnings')
|
console.log(warnings, 'warnings')
|
||||||
if (warnings && warnings.length) {
|
if (warnings && warnings.length) {
|
||||||
warnings.forEach((warn) => console.warn(warn))
|
warnings.forEach((warn) => console.warn(warn))
|
||||||
}
|
}
|
||||||
@ -556,7 +567,7 @@ const downloadProcessAsSvg = () => {
|
|||||||
}
|
}
|
||||||
const processSimulation = () => {
|
const processSimulation = () => {
|
||||||
simulationStatus.value = !simulationStatus.value
|
simulationStatus.value = !simulationStatus.value
|
||||||
// console.log(bpmnModeler.get('toggleMode', 'strict'), "bpmnModeler.get('toggleMode')")
|
console.log(bpmnModeler.get('toggleMode', 'strict'), "bpmnModeler.get('toggleMode')")
|
||||||
props.simulation && bpmnModeler.get('toggleMode', 'strict').toggleMode()
|
props.simulation && bpmnModeler.get('toggleMode', 'strict').toggleMode()
|
||||||
}
|
}
|
||||||
const processRedo = () => {
|
const processRedo = () => {
|
||||||
@ -619,7 +630,7 @@ const elementsAlign = (align) => {
|
|||||||
}
|
}
|
||||||
/*----------------------------- 方法结束 ---------------------------------*/
|
/*----------------------------- 方法结束 ---------------------------------*/
|
||||||
const previewProcessXML = () => {
|
const previewProcessXML = () => {
|
||||||
// console.log(bpmnModeler.saveXML, 'bpmnModeler')
|
console.log(bpmnModeler.saveXML, 'bpmnModeler')
|
||||||
bpmnModeler.saveXML({ format: true }).then(({ xml }) => {
|
bpmnModeler.saveXML({ format: true }).then(({ xml }) => {
|
||||||
// console.log(xml, 'xml111111')
|
// console.log(xml, 'xml111111')
|
||||||
previewResult.value = xml
|
previewResult.value = xml
|
||||||
@ -655,10 +666,10 @@ const previewProcessJson = () => {
|
|||||||
}
|
}
|
||||||
/* ------------------------------------------------ 芋道源码 methods ------------------------------------------------------ */
|
/* ------------------------------------------------ 芋道源码 methods ------------------------------------------------------ */
|
||||||
const processSave = async () => {
|
const processSave = async () => {
|
||||||
// console.log(bpmnModeler, 'bpmnModelerbpmnModelerbpmnModelerbpmnModeler')
|
console.log(bpmnModeler, 'bpmnModelerbpmnModelerbpmnModelerbpmnModeler')
|
||||||
const { err, xml } = await bpmnModeler.saveXML()
|
const { err, xml } = await bpmnModeler.saveXML()
|
||||||
// console.log(err, 'errerrerrerrerr')
|
console.log(err, 'errerrerrerrerr')
|
||||||
// console.log(xml, 'xmlxmlxmlxmlxml')
|
console.log(xml, 'xmlxmlxmlxmlxml')
|
||||||
// 读取异常时抛出异常
|
// 读取异常时抛出异常
|
||||||
if (err) {
|
if (err) {
|
||||||
// this.$modal.msgError('保存模型失败,请重试!')
|
// this.$modal.msgError('保存模型失败,请重试!')
|
||||||
@ -668,38 +679,20 @@ const processSave = async () => {
|
|||||||
// 触发 save 事件
|
// 触发 save 事件
|
||||||
emit('save', xml)
|
emit('save', xml)
|
||||||
}
|
}
|
||||||
|
/** 高亮显示 */
|
||||||
|
// const highlightedCode = (previewType, previewResult) => {
|
||||||
|
// console.log(previewType, 'previewType, previewResult')
|
||||||
|
// console.log(previewResult, 'previewType, previewResult')
|
||||||
|
// console.log(hljs.highlight, 'hljs.highlight')
|
||||||
|
// const result = hljs.highlight(previewType, previewResult.value || '', true)
|
||||||
|
// return result.value || ' '
|
||||||
|
// }
|
||||||
onBeforeMount(() => {
|
onBeforeMount(() => {
|
||||||
// console.log(props, 'propspropspropsprops')
|
console.log(props, 'propspropspropsprops')
|
||||||
})
|
})
|
||||||
|
onMounted(() => {
|
||||||
/**
|
|
||||||
* 代码高亮
|
|
||||||
*/
|
|
||||||
import hljs from 'highlight.js' // 导入代码高亮文件
|
|
||||||
import 'highlight.js/styles/github.css' // 导入代码高亮样式
|
|
||||||
import java from 'highlight.js/lib/languages/java'
|
|
||||||
import xml from 'highlight.js/lib/languages/java'
|
|
||||||
import javascript from 'highlight.js/lib/languages/javascript'
|
|
||||||
import sql from 'highlight.js/lib/languages/sql'
|
|
||||||
import typescript from 'highlight.js/lib/languages/typescript'
|
|
||||||
const highlightedCode = (item) => {
|
|
||||||
const language = item.filePath.substring(item.filePath.lastIndexOf('.') + 1)
|
|
||||||
const result = hljs.highlight(language, item.code || '', true)
|
|
||||||
return result.value || ' '
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 初始化 **/
|
|
||||||
onMounted(async () => {
|
|
||||||
initBpmnModeler()
|
initBpmnModeler()
|
||||||
createNewDiagram(props.value)
|
createNewDiagram(props.value)
|
||||||
// 注册代码高亮的各种语言
|
|
||||||
hljs.registerLanguage('java', java)
|
|
||||||
hljs.registerLanguage('xml', xml)
|
|
||||||
hljs.registerLanguage('html', xml)
|
|
||||||
hljs.registerLanguage('vue', xml)
|
|
||||||
hljs.registerLanguage('javascript', javascript)
|
|
||||||
hljs.registerLanguage('sql', sql)
|
|
||||||
hljs.registerLanguage('typescript', typescript)
|
|
||||||
})
|
})
|
||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
// this.$once('hook:beforeDestroy', () => {
|
// this.$once('hook:beforeDestroy', () => {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<script lang="ts" name="Footer" setup>
|
<script lang="ts" setup>
|
||||||
import { useAppStore } from '@/store/modules/app'
|
import { useAppStore } from '@/store/modules/app'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@ import type { RouteLocationNormalizedLoaded, RouterLinkProps } from 'vue-router'
|
|||||||
import { usePermissionStore } from '@/store/modules/permission'
|
import { usePermissionStore } from '@/store/modules/permission'
|
||||||
import { useTagsViewStore } from '@/store/modules/tagsView'
|
import { useTagsViewStore } from '@/store/modules/tagsView'
|
||||||
import { useAppStore } from '@/store/modules/app'
|
import { useAppStore } from '@/store/modules/app'
|
||||||
|
|
||||||
import { filterAffixTags } from './helper'
|
import { filterAffixTags } from './helper'
|
||||||
import { ContextMenu, ContextMenuExpose } from '@/layout/components/ContextMenu'
|
import { ContextMenu, ContextMenuExpose } from '@/layout/components/ContextMenu'
|
||||||
import { useDesign } from '@/hooks/web/useDesign'
|
import { useDesign } from '@/hooks/web/useDesign'
|
||||||
|
@ -454,5 +454,5 @@ export default {
|
|||||||
btn_zoom_out: 'Zoom out',
|
btn_zoom_out: 'Zoom out',
|
||||||
preview: 'Preivew'
|
preview: 'Preivew'
|
||||||
},
|
},
|
||||||
'OAuth 2.0': 'OAuth 2.0'
|
'OAuth 2.0': 'OAuth 2.0' // 避免菜单名是 OAuth 2.0 时,一直 warn 报错
|
||||||
}
|
}
|
||||||
|
@ -122,7 +122,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
|
|||||||
hidden: true,
|
hidden: true,
|
||||||
canTo: true,
|
canTo: true,
|
||||||
icon: '',
|
icon: '',
|
||||||
activeMenu: 'system/dict/index'
|
activeMenu: '/system/dict'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -567,7 +567,8 @@ const remainingRouter: AppRouteRecordRaw[] = [
|
|||||||
meta: {
|
meta: {
|
||||||
title: '联系人详情',
|
title: '联系人详情',
|
||||||
noCache: true,
|
noCache: true,
|
||||||
hidden: true
|
hidden: true,
|
||||||
|
activeMenu: '/crm/contact'
|
||||||
},
|
},
|
||||||
component: () => import('@/views/crm/contact/detail/index.vue')
|
component: () => import('@/views/crm/contact/detail/index.vue')
|
||||||
},
|
},
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
import { defineStore } from 'pinia'
|
import { defineStore } from 'pinia'
|
||||||
import { store } from '../index'
|
import { store } from '../index'
|
||||||
|
// @ts-ignore
|
||||||
import { DictDataVO } from '@/api/system/dict/types'
|
import { DictDataVO } from '@/api/system/dict/types'
|
||||||
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
|
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
|
||||||
const { wsCache } = useCache('sessionStorage')
|
const { wsCache } = useCache('sessionStorage')
|
||||||
import { listSimpleDictDataApi } from '@/api/system/dict/dict.data'
|
import { getSimpleDictDataList } from '@/api/system/dict/dict.data'
|
||||||
|
|
||||||
export interface DictValueType {
|
export interface DictValueType {
|
||||||
value: any
|
value: any
|
||||||
@ -44,9 +45,9 @@ export const useDictStore = defineStore('dict', {
|
|||||||
this.dictMap = dictMap
|
this.dictMap = dictMap
|
||||||
this.isSetDict = true
|
this.isSetDict = true
|
||||||
} else {
|
} else {
|
||||||
const res = await listSimpleDictDataApi()
|
const res = await getSimpleDictDataList()
|
||||||
// 设置数据
|
// 设置数据
|
||||||
const dictDataMap = new Map<string, any>();
|
const dictDataMap = new Map<string, any>()
|
||||||
if (res != null) {
|
if (res != null) {
|
||||||
res.forEach((dictData: DictDataVO) => {
|
res.forEach((dictData: DictDataVO) => {
|
||||||
// 获得 dictType 层级
|
// 获得 dictType 层级
|
||||||
@ -61,7 +62,7 @@ export const useDictStore = defineStore('dict', {
|
|||||||
colorType: dictData.colorType,
|
colorType: dictData.colorType,
|
||||||
cssClass: dictData.cssClass
|
cssClass: dictData.cssClass
|
||||||
})
|
})
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
this.dictMap = dictDataMap
|
this.dictMap = dictDataMap
|
||||||
this.isSetDict = true
|
this.isSetDict = true
|
||||||
@ -76,7 +77,7 @@ export const useDictStore = defineStore('dict', {
|
|||||||
},
|
},
|
||||||
async resetDict() {
|
async resetDict() {
|
||||||
wsCache.delete(CACHE_KEY.DICT_CACHE)
|
wsCache.delete(CACHE_KEY.DICT_CACHE)
|
||||||
const res = await listSimpleDictDataApi()
|
const res = await getSimpleDictDataList()
|
||||||
// 设置数据
|
// 设置数据
|
||||||
const dictDataMap = new Map<string, any>()
|
const dictDataMap = new Map<string, any>()
|
||||||
res.forEach((dictData: DictDataVO) => {
|
res.forEach((dictData: DictDataVO) => {
|
||||||
|
@ -72,53 +72,6 @@ export function formatDate(date: Date, format?: string): string {
|
|||||||
return date ? dayjs(date).format(format ?? 'YYYY-MM-DD HH:mm:ss') : ''
|
return date ? dayjs(date).format(format ?? 'YYYY-MM-DD HH:mm:ss') : ''
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO 芋艿:稍后去掉
|
|
||||||
// 日期格式化
|
|
||||||
export function parseTime(time: any, pattern?: string) {
|
|
||||||
if (arguments.length === 0 || !time) {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
|
|
||||||
let date
|
|
||||||
if (typeof time === 'object') {
|
|
||||||
date = time
|
|
||||||
} else {
|
|
||||||
if (typeof time === 'string' && /^[0-9]+$/.test(time)) {
|
|
||||||
time = parseInt(time)
|
|
||||||
} else if (typeof time === 'string') {
|
|
||||||
time = time
|
|
||||||
.replace(new RegExp(/-/gm), '/')
|
|
||||||
.replace('T', ' ')
|
|
||||||
.replace(new RegExp(/\.\d{3}/gm), '')
|
|
||||||
}
|
|
||||||
if (typeof time === 'number' && time.toString().length === 10) {
|
|
||||||
time = time * 1000
|
|
||||||
}
|
|
||||||
date = new Date(time)
|
|
||||||
}
|
|
||||||
const formatObj = {
|
|
||||||
y: date.getFullYear(),
|
|
||||||
m: date.getMonth() + 1,
|
|
||||||
d: date.getDate(),
|
|
||||||
h: date.getHours(),
|
|
||||||
i: date.getMinutes(),
|
|
||||||
s: date.getSeconds(),
|
|
||||||
a: date.getDay()
|
|
||||||
}
|
|
||||||
const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
|
|
||||||
let value = formatObj[key]
|
|
||||||
// Note: getDay() returns 0 on Sunday
|
|
||||||
if (key === 'a') {
|
|
||||||
return ['日', '一', '二', '三', '四', '五', '六'][value]
|
|
||||||
}
|
|
||||||
if (result.length > 0 && value < 10) {
|
|
||||||
value = '0' + value
|
|
||||||
}
|
|
||||||
return value || 0
|
|
||||||
})
|
|
||||||
return time_str
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前的日期+时间
|
* 获取当前的日期+时间
|
||||||
*/
|
*/
|
||||||
|
@ -271,6 +271,7 @@ export const handleTree = (data: any[], id?: string, parentId?: string, children
|
|||||||
|
|
||||||
return tree
|
return tree
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构造树型结构数据
|
* 构造树型结构数据
|
||||||
* @param {*} data 数据源
|
* @param {*} data 数据源
|
||||||
@ -279,6 +280,7 @@ export const handleTree = (data: any[], id?: string, parentId?: string, children
|
|||||||
* @param {*} children 孩子节点字段 默认 'children'
|
* @param {*} children 孩子节点字段 默认 'children'
|
||||||
* @param {*} rootId 根Id 默认 0
|
* @param {*} rootId 根Id 默认 0
|
||||||
*/
|
*/
|
||||||
|
// @ts-ignore
|
||||||
export const handleTree2 = (data, id, parentId, children, rootId) => {
|
export const handleTree2 = (data, id, parentId, children, rootId) => {
|
||||||
id = id || 'id'
|
id = id || 'id'
|
||||||
parentId = parentId || 'parentId'
|
parentId = parentId || 'parentId'
|
||||||
|
@ -19,11 +19,11 @@
|
|||||||
<el-col :span="24" style="padding-right: 10px; padding-left: 10px">
|
<el-col :span="24" style="padding-right: 10px; padding-left: 10px">
|
||||||
<el-form-item v-if="loginData.tenantEnable === 'true'" prop="tenantName">
|
<el-form-item v-if="loginData.tenantEnable === 'true'" prop="tenantName">
|
||||||
<el-input
|
<el-input
|
||||||
type="primary"
|
|
||||||
link
|
|
||||||
v-model="loginData.loginForm.tenantName"
|
v-model="loginData.loginForm.tenantName"
|
||||||
:placeholder="t('login.tenantNamePlaceholder')"
|
:placeholder="t('login.tenantNamePlaceholder')"
|
||||||
:prefix-icon="iconHouse"
|
:prefix-icon="iconHouse"
|
||||||
|
type="primary"
|
||||||
|
link
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
@ -70,7 +70,7 @@ const formRules = reactive({
|
|||||||
status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
|
status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
|
||||||
})
|
})
|
||||||
const formRef = ref() // 表单 Ref
|
const formRef = ref() // 表单 Ref
|
||||||
const userList = ref([]) // 用户列表
|
const userList = ref<any[]>([]) // 用户列表
|
||||||
|
|
||||||
/** 打开弹窗 */
|
/** 打开弹窗 */
|
||||||
const open = async (type: string, id?: number) => {
|
const open = async (type: string, id?: number) => {
|
||||||
|
@ -16,8 +16,8 @@
|
|||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { propTypes } from '@/utils/propTypes'
|
import { propTypes } from '@/utils/propTypes'
|
||||||
import * as ActivityApi from '@/api/bpm/activity'
|
|
||||||
import { MyProcessViewer } from '@/components/bpmnProcessDesigner/package'
|
import { MyProcessViewer } from '@/components/bpmnProcessDesigner/package'
|
||||||
|
import * as ActivityApi from '@/api/bpm/activity'
|
||||||
|
|
||||||
defineOptions({ name: 'BpmProcessInstanceBpmnViewer' })
|
defineOptions({ name: 'BpmProcessInstanceBpmnViewer' })
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ import { PropType } from 'vue'
|
|||||||
import * as CodegenApi from '@/api/infra/codegen'
|
import * as CodegenApi from '@/api/infra/codegen'
|
||||||
import * as DictDataApi from '@/api/system/dict/dict.type'
|
import * as DictDataApi from '@/api/system/dict/dict.type'
|
||||||
|
|
||||||
defineOptions({ name: 'InfraCodegenColumInfoForm' })
|
defineOptions({ name: 'InfraCodegenColumnInfoForm' })
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
columns: {
|
columns: {
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<doc-alert title="数据库文档" url="https://doc.iocoder.cn/db-doc/" />
|
||||||
|
|
||||||
<ContentWrap title="数据库文档">
|
<ContentWrap title="数据库文档">
|
||||||
<div class="mb-10px">
|
<div class="mb-10px">
|
||||||
<el-button type="primary" plain @click="handleExport('HTML')">
|
<el-button type="primary" plain @click="handleExport('HTML')">
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<doc-alert title="数据库 MyBatis" url="https://doc.iocoder.cn/mybatis/" />
|
||||||
|
<doc-alert title="多数据源(读写分离)" url="https://doc.iocoder.cn/dynamic-datasource/" />
|
||||||
|
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<IFrame v-if="!loading" :src="url" />
|
<IFrame v-if="!loading" :src="url" />
|
||||||
</ContentWrap>
|
</ContentWrap>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<doc-alert title="Redis 缓存" url="https://doc.iocoder.cn/redis-cache/" />
|
||||||
|
<doc-alert title="本地缓存" url="https://doc.iocoder.cn/local-cache/" />
|
||||||
<el-scrollbar height="calc(100vh - 88px - 40px - 50px)">
|
<el-scrollbar height="calc(100vh - 88px - 40px - 50px)">
|
||||||
<el-row>
|
<el-row>
|
||||||
<!-- 基本信息 -->
|
<!-- 基本信息 -->
|
||||||
@ -59,68 +61,20 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
<XModal v-model="dialogVisible" :title="keyTemplate + ' 模板'">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="14" class="mt-3">
|
|
||||||
<el-card shadow="always">
|
|
||||||
<template #header>
|
|
||||||
<div class="card-header">
|
|
||||||
<span>键名列表</span>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<el-table :data="cacheKeys" style="width: 100%" @row-click="handleKeyValue">
|
|
||||||
<el-table-column label="缓存键名" align="center" :show-overflow-tooltip="true">
|
|
||||||
<template #default="{ row }">
|
|
||||||
{{ row }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" align="right" width="60">
|
|
||||||
<template #default="{ row }">
|
|
||||||
<XTextButton preIcon="ep:delete" @click="handleDeleteKey(row)" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
</el-card>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="10" class="mt-3">
|
|
||||||
<el-card shadow="always">
|
|
||||||
<template #header>
|
|
||||||
<div class="card-header">
|
|
||||||
<span>缓存内容</span>
|
|
||||||
<XTextButton
|
|
||||||
preIcon="ep:refresh"
|
|
||||||
title="清理全部"
|
|
||||||
class="float-right p-1"
|
|
||||||
@click="handleDeleteKeys(keyTemplate)"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<el-descriptions :column="1">
|
|
||||||
<el-descriptions-item label="缓存键名:">{{ cacheForm.key }}</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="缓存内容:">{{ cacheForm.value }}</el-descriptions-item>
|
|
||||||
</el-descriptions>
|
|
||||||
</el-card>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</XModal>
|
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as RedisApi from '@/api/infra/redis'
|
import * as RedisApi from '@/api/infra/redis'
|
||||||
import { RedisKeyInfo, RedisMonitorInfoVO } from '@/api/infra/redis/types'
|
import { RedisMonitorInfoVO } from '@/api/infra/redis/types'
|
||||||
import { DICT_TYPE } from '@/utils/dict'
|
|
||||||
|
|
||||||
defineOptions({ name: 'InfraRedis' })
|
defineOptions({ name: 'InfraRedis' })
|
||||||
|
|
||||||
const { t } = useI18n() // 国际化
|
|
||||||
const message = useMessage() // 消息弹窗
|
|
||||||
const cache = ref<RedisMonitorInfoVO>()
|
const cache = ref<RedisMonitorInfoVO>()
|
||||||
// 基本信息
|
// 基本信息
|
||||||
const readRedisInfo = async () => {
|
const readRedisInfo = async () => {
|
||||||
const data = await RedisApi.getCacheApi()
|
const data = await RedisApi.getCacheApi()
|
||||||
cache.value = data
|
cache.value = data
|
||||||
// loadEchartOptions(data.commandStats)
|
|
||||||
}
|
}
|
||||||
const dialogVisible = ref(false)
|
|
||||||
// 内存使用情况
|
// 内存使用情况
|
||||||
const usedmemoryEchartChika = reactive<any>({
|
const usedmemoryEchartChika = reactive<any>({
|
||||||
title: {
|
title: {
|
||||||
@ -299,7 +253,7 @@ const usedMemoryInstance = async () => {
|
|||||||
value: cache.value!.info.used_memory_human,
|
value: cache.value!.info.used_memory_human,
|
||||||
name: '内存消耗'
|
name: '内存消耗'
|
||||||
}
|
}
|
||||||
// console.log(cache.value!.info)
|
console.log(cache.value!.info)
|
||||||
usedmemoryEchartChika.tooltip = {
|
usedmemoryEchartChika.tooltip = {
|
||||||
formatter: '{b} <br/>{a} : ' + cache.value!.info.used_memory_human
|
formatter: '{b} <br/>{a} : ' + cache.value!.info.used_memory_human
|
||||||
}
|
}
|
||||||
@ -313,7 +267,4 @@ onMounted(() => {
|
|||||||
// 加载数据
|
// 加载数据
|
||||||
getSummary()
|
getSummary()
|
||||||
})
|
})
|
||||||
onBeforeMount(() => {
|
|
||||||
readRedisInfo()
|
|
||||||
})
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<doc-alert title="服务监控" url="https://doc.iocoder.cn/server-monitor/" />
|
||||||
|
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<IFrame v-if="!loading" v-loading="loading" :src="src" />
|
<IFrame v-if="!loading" v-loading="loading" :src="src" />
|
||||||
</ContentWrap>
|
</ContentWrap>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<doc-alert title="服务监控" url="https://doc.iocoder.cn/server-monitor/" />
|
||||||
|
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<IFrame v-if="!loading" v-loading="loading" :src="src" />
|
<IFrame v-if="!loading" v-loading="loading" :src="src" />
|
||||||
</ContentWrap>
|
</ContentWrap>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<doc-alert title="接口文档" url="https://doc.iocoder.cn/api-doc/" />
|
||||||
|
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<IFrame :src="src" />
|
<IFrame :src="src" />
|
||||||
</ContentWrap>
|
</ContentWrap>
|
||||||
|
@ -74,7 +74,7 @@ import { useWebSocket } from '@vueuse/core'
|
|||||||
import { getAccessToken } from '@/utils/auth'
|
import { getAccessToken } from '@/utils/auth'
|
||||||
import * as UserApi from '@/api/system/user'
|
import * as UserApi from '@/api/system/user'
|
||||||
|
|
||||||
defineOptions({ name: 'WebSocket' })
|
defineOptions({ name: 'InfraWebSocket' })
|
||||||
|
|
||||||
const message = useMessage() // 消息弹窗
|
const message = useMessage() // 消息弹窗
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
|||||||
import { CommonStatusEnum } from '@/utils/constants'
|
import { CommonStatusEnum } from '@/utils/constants'
|
||||||
import * as ProductCategoryApi from '@/api/mall/product/category'
|
import * as ProductCategoryApi from '@/api/mall/product/category'
|
||||||
|
|
||||||
defineOptions({ name: 'ProductCategoryForm' })
|
defineOptions({ name: 'ProductCategory' })
|
||||||
|
|
||||||
const { t } = useI18n() // 国际化
|
const { t } = useI18n() // 国际化
|
||||||
const message = useMessage() // 消息弹窗
|
const message = useMessage() // 消息弹窗
|
||||||
|
@ -15,10 +15,8 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="dialog-footer">
|
|
||||||
<el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
|
<el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
</template>
|
</template>
|
||||||
|
@ -103,7 +103,7 @@
|
|||||||
<el-table-column align="center" label="一级返佣(元)" min-width="168">
|
<el-table-column align="center" label="一级返佣(元)" min-width="168">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-input-number
|
<el-input-number
|
||||||
v-model="row.firstBrokerageRecord"
|
v-model="row.firstBrokeragePrice"
|
||||||
:min="0"
|
:min="0"
|
||||||
:precision="2"
|
:precision="2"
|
||||||
:step="0.1"
|
:step="0.1"
|
||||||
@ -115,7 +115,7 @@
|
|||||||
<el-table-column align="center" label="二级返佣(元)" min-width="168">
|
<el-table-column align="center" label="二级返佣(元)" min-width="168">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-input-number
|
<el-input-number
|
||||||
v-model="row.secondBrokerageRecord"
|
v-model="row.secondBrokeragePrice"
|
||||||
:min="0"
|
:min="0"
|
||||||
:precision="2"
|
:precision="2"
|
||||||
:step="0.1"
|
:step="0.1"
|
||||||
@ -211,12 +211,12 @@
|
|||||||
<template v-if="formData!.subCommissionType">
|
<template v-if="formData!.subCommissionType">
|
||||||
<el-table-column align="center" label="一级返佣(元)" min-width="80">
|
<el-table-column align="center" label="一级返佣(元)" min-width="80">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
{{ row.firstBrokerageRecord }}
|
{{ row.firstBrokeragePrice }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column align="center" label="二级返佣(元)" min-width="80">
|
<el-table-column align="center" label="二级返佣(元)" min-width="80">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
{{ row.secondBrokerageRecord }}
|
{{ row.secondBrokeragePrice }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</template>
|
</template>
|
||||||
@ -294,7 +294,6 @@ import { PropertyAndValues } from './index'
|
|||||||
import { ElTable } from 'element-plus'
|
import { ElTable } from 'element-plus'
|
||||||
|
|
||||||
defineOptions({ name: 'SkuList' })
|
defineOptions({ name: 'SkuList' })
|
||||||
|
|
||||||
const message = useMessage() // 消息弹窗
|
const message = useMessage() // 消息弹窗
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@ -326,8 +325,8 @@ const skuList = ref<Sku[]>([
|
|||||||
stock: 0, // 库存
|
stock: 0, // 库存
|
||||||
weight: 0, // 商品重量
|
weight: 0, // 商品重量
|
||||||
volume: 0, // 商品体积
|
volume: 0, // 商品体积
|
||||||
firstBrokerageRecord: 0, // 一级分销的佣金
|
firstBrokeragePrice: 0, // 一级分销的佣金
|
||||||
secondBrokerageRecord: 0 // 二级分销的佣金
|
secondBrokeragePrice: 0 // 二级分销的佣金
|
||||||
}
|
}
|
||||||
]) // 批量添加时的临时数据
|
]) // 批量添加时的临时数据
|
||||||
|
|
||||||
@ -446,8 +445,8 @@ const generateTableData = (propertyList: any[]) => {
|
|||||||
stock: 0,
|
stock: 0,
|
||||||
weight: 0,
|
weight: 0,
|
||||||
volume: 0,
|
volume: 0,
|
||||||
firstBrokerageRecord: 0,
|
firstBrokeragePrice: 0,
|
||||||
secondBrokerageRecord: 0
|
secondBrokeragePrice: 0
|
||||||
}
|
}
|
||||||
// 如果存在属性相同的 sku 则不做处理
|
// 如果存在属性相同的 sku 则不做处理
|
||||||
const index = formData.value!.skus!.findIndex(
|
const index = formData.value!.skus!.findIndex(
|
||||||
@ -522,8 +521,8 @@ watch(
|
|||||||
stock: 0,
|
stock: 0,
|
||||||
weight: 0,
|
weight: 0,
|
||||||
volume: 0,
|
volume: 0,
|
||||||
firstBrokerageRecord: 0,
|
firstBrokeragePrice: 0,
|
||||||
secondBrokerageRecord: 0
|
secondBrokeragePrice: 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ interface RuleConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得商品的规格列表
|
* 获得商品的规格列表 - 商品相关的公共函数
|
||||||
*
|
*
|
||||||
* @param spu
|
* @param spu
|
||||||
* @return PropertyAndValues 规格列表
|
* @return PropertyAndValues 规格列表
|
||||||
@ -51,4 +51,4 @@ const getPropertyList = (spu: Spu): PropertyAndValues[] => {
|
|||||||
return properties
|
return properties
|
||||||
}
|
}
|
||||||
|
|
||||||
export { SkuList, getPropertyList, PropertyAndValues, RuleConfig }
|
export { SkuList, PropertyAndValues, RuleConfig, getPropertyList }
|
||||||
|
@ -102,8 +102,8 @@ const formData = ref<ProductSpuApi.Spu>({
|
|||||||
stock: 0, // 库存
|
stock: 0, // 库存
|
||||||
weight: 0, // 商品重量
|
weight: 0, // 商品重量
|
||||||
volume: 0, // 商品体积
|
volume: 0, // 商品体积
|
||||||
firstBrokerageRecord: 0, // 一级分销的佣金
|
firstBrokeragePrice: 0, // 一级分销的佣金
|
||||||
secondBrokerageRecord: 0 // 二级分销的佣金
|
secondBrokeragePrice: 0 // 二级分销的佣金
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
description: '', // 商品详情
|
description: '', // 商品详情
|
||||||
@ -127,15 +127,15 @@ const getDetail = async () => {
|
|||||||
item.price = floatToFixed2(item.price)
|
item.price = floatToFixed2(item.price)
|
||||||
item.marketPrice = floatToFixed2(item.marketPrice)
|
item.marketPrice = floatToFixed2(item.marketPrice)
|
||||||
item.costPrice = floatToFixed2(item.costPrice)
|
item.costPrice = floatToFixed2(item.costPrice)
|
||||||
item.firstBrokerageRecord = floatToFixed2(item.firstBrokerageRecord)
|
item.firstBrokeragePrice = floatToFixed2(item.firstBrokeragePrice)
|
||||||
item.secondBrokerageRecord = floatToFixed2(item.secondBrokerageRecord)
|
item.secondBrokeragePrice = floatToFixed2(item.secondBrokeragePrice)
|
||||||
} else {
|
} else {
|
||||||
// 回显价格分转元
|
// 回显价格分转元
|
||||||
item.price = formatToFraction(item.price)
|
item.price = formatToFraction(item.price)
|
||||||
item.marketPrice = formatToFraction(item.marketPrice)
|
item.marketPrice = formatToFraction(item.marketPrice)
|
||||||
item.costPrice = formatToFraction(item.costPrice)
|
item.costPrice = formatToFraction(item.costPrice)
|
||||||
item.firstBrokerageRecord = formatToFraction(item.firstBrokerageRecord)
|
item.firstBrokeragePrice = formatToFraction(item.firstBrokeragePrice)
|
||||||
item.secondBrokerageRecord = formatToFraction(item.secondBrokerageRecord)
|
item.secondBrokeragePrice = formatToFraction(item.secondBrokeragePrice)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
formData.value = res
|
formData.value = res
|
||||||
@ -165,8 +165,8 @@ const submitForm = async () => {
|
|||||||
item.price = convertToInteger(item.price)
|
item.price = convertToInteger(item.price)
|
||||||
item.marketPrice = convertToInteger(item.marketPrice)
|
item.marketPrice = convertToInteger(item.marketPrice)
|
||||||
item.costPrice = convertToInteger(item.costPrice)
|
item.costPrice = convertToInteger(item.costPrice)
|
||||||
item.firstBrokerageRecord = convertToInteger(item.firstBrokerageRecord)
|
item.firstBrokeragePrice = convertToInteger(item.firstBrokeragePrice)
|
||||||
item.secondBrokerageRecord = convertToInteger(item.secondBrokerageRecord)
|
item.secondBrokeragePrice = convertToInteger(item.secondBrokeragePrice)
|
||||||
})
|
})
|
||||||
// 处理轮播图列表
|
// 处理轮播图列表
|
||||||
const newSliderPicUrls: any[] = []
|
const newSliderPicUrls: any[] = []
|
||||||
|
@ -60,22 +60,6 @@
|
|||||||
<el-form-item label="用户标签" prop="tagIds">
|
<el-form-item label="用户标签" prop="tagIds">
|
||||||
<MemberTagSelect v-model="formData.tagIds" show-add />
|
<MemberTagSelect v-model="formData.tagIds" show-add />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="用户等级" prop="levelId">
|
|
||||||
<MemberLevelSelect v-model="formData.levelId" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item
|
|
||||||
label="修改原因"
|
|
||||||
prop="levelReason"
|
|
||||||
v-if="formData.levelId !== originLevelId"
|
|
||||||
>
|
|
||||||
<el-input type="text" v-model="formData.levelReason" placeholder="请输入修改原因" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-form-item label="用户分组" prop="groupId">
|
<el-form-item label="用户分组" prop="groupId">
|
||||||
<MemberGroupSelect v-model="formData.groupId" />
|
<MemberGroupSelect v-model="formData.groupId" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -95,7 +79,6 @@ import * as UserApi from '@/api/member/user'
|
|||||||
import * as AreaApi from '@/api/system/area'
|
import * as AreaApi from '@/api/system/area'
|
||||||
import { defaultProps } from '@/utils/tree'
|
import { defaultProps } from '@/utils/tree'
|
||||||
import MemberTagSelect from '@/views/member/tag/components/MemberTagSelect.vue'
|
import MemberTagSelect from '@/views/member/tag/components/MemberTagSelect.vue'
|
||||||
import MemberLevelSelect from '@/views/member/level/components/MemberLevelSelect.vue'
|
|
||||||
import MemberGroupSelect from '@/views/member/group/components/MemberGroupSelect.vue'
|
import MemberGroupSelect from '@/views/member/group/components/MemberGroupSelect.vue'
|
||||||
|
|
||||||
const { t } = useI18n() // 国际化
|
const { t } = useI18n() // 国际化
|
||||||
@ -118,18 +101,14 @@ const formData = ref({
|
|||||||
birthday: undefined,
|
birthday: undefined,
|
||||||
mark: undefined,
|
mark: undefined,
|
||||||
tagIds: [],
|
tagIds: [],
|
||||||
levelId: undefined,
|
|
||||||
levelReason: undefined,
|
|
||||||
groupId: undefined
|
groupId: undefined
|
||||||
})
|
})
|
||||||
const formRules = reactive({
|
const formRules = reactive({
|
||||||
mobile: [{ required: true, message: '手机号不能为空', trigger: 'blur' }],
|
mobile: [{ required: true, message: '手机号不能为空', trigger: 'blur' }],
|
||||||
status: [{ required: true, message: '状态不能为空', trigger: 'blur' }],
|
status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
|
||||||
levelReason: [{ required: true, message: '修改原因不能为空', trigger: 'blur' }]
|
|
||||||
})
|
})
|
||||||
const formRef = ref() // 表单 Ref
|
const formRef = ref() // 表单 Ref
|
||||||
const areaList = ref([]) // 地区列表
|
const areaList = ref([]) // 地区列表
|
||||||
const originLevelId = ref() // 修改前的会员等级
|
|
||||||
|
|
||||||
/** 打开弹窗 */
|
/** 打开弹窗 */
|
||||||
const open = async (type: string, id?: number) => {
|
const open = async (type: string, id?: number) => {
|
||||||
@ -142,7 +121,6 @@ const open = async (type: string, id?: number) => {
|
|||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
try {
|
try {
|
||||||
formData.value = await UserApi.getUser(id)
|
formData.value = await UserApi.getUser(id)
|
||||||
originLevelId.value = formData.value.levelId
|
|
||||||
} finally {
|
} finally {
|
||||||
formLoading.value = false
|
formLoading.value = false
|
||||||
}
|
}
|
||||||
@ -194,8 +172,6 @@ const resetForm = () => {
|
|||||||
birthday: undefined,
|
birthday: undefined,
|
||||||
mark: undefined,
|
mark: undefined,
|
||||||
tagIds: [],
|
tagIds: [],
|
||||||
levelId: undefined,
|
|
||||||
levelReason: undefined,
|
|
||||||
groupId: undefined
|
groupId: undefined
|
||||||
}
|
}
|
||||||
formRef.value?.resetFields()
|
formRef.value?.resetFields()
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<doc-alert title="公众号接入" url="https://doc.iocoder.cn/mp/account/" />
|
||||||
|
|
||||||
<!-- 搜索工作栏 -->
|
<!-- 搜索工作栏 -->
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-form
|
<el-form
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<doc-alert title="自动回复" url="https://doc.iocoder.cn/mp/auto-reply/" />
|
||||||
|
|
||||||
<!-- 搜索工作栏 -->
|
<!-- 搜索工作栏 -->
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-form class="-mb-15px" :model="queryParams" :inline="true" label-width="68px">
|
<el-form class="-mb-15px" :model="queryParams" :inline="true" label-width="68px">
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
<span class="amr-duration" v-if="duration">{{ duration }} 秒</span>
|
<span class="amr-duration" v-if="duration">{{ duration }} 秒</span>
|
||||||
</el-icon>
|
</el-icon>
|
||||||
<div v-if="content">
|
<div v-if="content">
|
||||||
<el-tag type="success" size="mini">语音识别</el-tag>
|
<el-tag type="success" size="small">语音识别</el-tag>
|
||||||
{{ content }}
|
{{ content }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<doc-alert title="公众号图文" url="https://doc.iocoder.cn/mp/article/" />
|
||||||
|
|
||||||
<!-- 搜索工作栏 -->
|
<!-- 搜索工作栏 -->
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-form
|
<el-form
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<doc-alert title="公众号图文" url="https://doc.iocoder.cn/mp/article/" />
|
||||||
|
|
||||||
<!-- 搜索工作栏 -->
|
<!-- 搜索工作栏 -->
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-form
|
<el-form
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<doc-alert title="公众号素材" url="https://doc.iocoder.cn/mp/material/" />
|
||||||
<!-- 搜索工作栏 -->
|
<!-- 搜索工作栏 -->
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-form class="-mb-15px" :inline="true" label-width="68px">
|
<el-form class="-mb-15px" :inline="true" label-width="68px">
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<doc-alert title="公众号菜单" url="https://doc.iocoder.cn/mp/menu/" />
|
||||||
<!-- 搜索工作栏 -->
|
<!-- 搜索工作栏 -->
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-form class="-mb-15px" ref="queryFormRef" :inline="true" label-width="68px">
|
<el-form class="-mb-15px" ref="queryFormRef" :inline="true" label-width="68px">
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<doc-alert title="公众号标签" url="https://doc.iocoder.cn/mp/tag/" />
|
||||||
|
|
||||||
<!-- 搜索工作栏 -->
|
<!-- 搜索工作栏 -->
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-form
|
<el-form
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<doc-alert title="公众号粉丝" url="https://doc.iocoder.cn/mp/user/" />
|
||||||
|
|
||||||
<!-- 搜索工作栏 -->
|
<!-- 搜索工作栏 -->
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-form
|
<el-form
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
<el-radio-group v-model="formData.socialType">
|
<el-radio-group v-model="formData.socialType">
|
||||||
<el-radio
|
<el-radio
|
||||||
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_SOCIAL_TYPE)"
|
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_SOCIAL_TYPE)"
|
||||||
:key="dict.value as number"
|
:key="dict.value"
|
||||||
:label="dict.value"
|
:label="dict.value"
|
||||||
>
|
>
|
||||||
{{ dict.label }}
|
{{ dict.label }}
|
||||||
@ -48,7 +48,7 @@
|
|||||||
<el-radio-group v-model="formData.status">
|
<el-radio-group v-model="formData.status">
|
||||||
<el-radio
|
<el-radio
|
||||||
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
|
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
|
||||||
:key="dict.value as number"
|
:key="dict.value"
|
||||||
:label="dict.value"
|
:label="dict.value"
|
||||||
>
|
>
|
||||||
{{ dict.label }}
|
{{ dict.label }}
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_SOCIAL_TYPE)"
|
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_SOCIAL_TYPE)"
|
||||||
:key="dict.value as number"
|
:key="dict.value"
|
||||||
:label="dict.label"
|
:label="dict.label"
|
||||||
:value="dict.value"
|
:value="dict.value"
|
||||||
/>
|
/>
|
||||||
@ -43,7 +43,7 @@
|
|||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in getIntDictOptions(DICT_TYPE.USER_TYPE)"
|
v-for="dict in getIntDictOptions(DICT_TYPE.USER_TYPE)"
|
||||||
:key="dict.value as number"
|
:key="dict.value"
|
||||||
:label="dict.label"
|
:label="dict.label"
|
||||||
:value="dict.value"
|
:value="dict.value"
|
||||||
/>
|
/>
|
||||||
@ -62,7 +62,7 @@
|
|||||||
<el-select v-model="queryParams.status" class="!w-240px" clearable placeholder="请选择状态">
|
<el-select v-model="queryParams.status" class="!w-240px" clearable placeholder="请选择状态">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
|
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
|
||||||
:key="dict.value as number"
|
:key="dict.value"
|
||||||
:label="dict.label"
|
:label="dict.label"
|
||||||
:value="dict.value"
|
:value="dict.value"
|
||||||
/>
|
/>
|
||||||
|
Loading…
Reference in New Issue
Block a user