补充修改

pull/420/head
shizhong 2024-03-12 19:51:40 +08:00
parent f1c2a6ef37
commit b7ec0eef6d
55 changed files with 177 additions and 301 deletions

10
.vscode/launch.json vendored
View File

@ -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
} }
] ]
} }

View File

@ -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(),

View File

@ -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',

View File

@ -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 })
} }
/** /**

View File

@ -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 })
}

View File

@ -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

View File

@ -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
}
})
}

View File

@ -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
}

View File

@ -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 // 商品销量
} }

View File

@ -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' })
} }

View File

@ -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

View File

@ -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 })

View File

@ -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>
} }

View File

@ -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 })
} }

View File

@ -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
})
}

View File

@ -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' })
})
} }

View File

@ -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' })
} }

View File

@ -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 || '&nbsp;'
// }
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 || '&nbsp;'
}
/** 初始化 **/
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', () => {

View File

@ -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'

View File

@ -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'

View File

@ -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 报错
} }

View File

@ -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')
}, },

View File

@ -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) => {

View File

@ -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
}
/** /**
* + * +
*/ */

View File

@ -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'

View File

@ -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>

View File

@ -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) => {

View File

@ -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' })

View File

@ -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: {

View File

@ -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')">

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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() //

View File

@ -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() //

View File

@ -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>

View File

@ -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
} }
] ]
} }

View File

@ -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 }

View File

@ -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[] = []

View File

@ -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()

View File

@ -1,4 +1,6 @@
<template> <template>
<doc-alert title="公众号接入" url="https://doc.iocoder.cn/mp/account/" />
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<ContentWrap> <ContentWrap>
<el-form <el-form

View File

@ -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">

View File

@ -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>

View File

@ -1,4 +1,6 @@
<template> <template>
<doc-alert title="公众号图文" url="https://doc.iocoder.cn/mp/article/" />
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<ContentWrap> <ContentWrap>
<el-form <el-form

View File

@ -1,4 +1,6 @@
<template> <template>
<doc-alert title="公众号图文" url="https://doc.iocoder.cn/mp/article/" />
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<ContentWrap> <ContentWrap>
<el-form <el-form

View File

@ -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">

View File

@ -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">

View File

@ -1,4 +1,6 @@
<template> <template>
<doc-alert title="公众号标签" url="https://doc.iocoder.cn/mp/tag/" />
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<ContentWrap> <ContentWrap>
<el-form <el-form

View File

@ -1,4 +1,6 @@
<template> <template>
<doc-alert title="公众号粉丝" url="https://doc.iocoder.cn/mp/user/" />
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<ContentWrap> <ContentWrap>
<el-form <el-form

View File

@ -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 }}

View File

@ -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"
/> />