强化ts类型

This commit is contained in:
xiangheng
2024-07-05 23:44:53 +08:00
parent 34c4eaaa5b
commit 0aea72fb12
11 changed files with 196 additions and 100 deletions

View File

@@ -6,6 +6,10 @@ import config from '@/config'
export function adminLists(params: any) {
return request.get({ url: '/system/admin/list', params })
}
// 管理员列表
export function adminListAll(params: any) {
return request.get({ url: '/system/admin/listAll', params })
}
// 管理员详情
export function adminDetail(params: any) {
return request.get({ url: '/system/admin/detail', params })

View File

@@ -141,9 +141,8 @@ function open(data) {
dialogVisible.value = true
}
function changeSteps(item) {
const fieldList = formDesign.value.getFieldWidgets()
fieldList.value = fieldList
fieldList.value = formDesign.value.getFieldWidgets()
console.log('fieldList', fieldList.value)
activeStep.value = item.key
}

View File

@@ -1,11 +1,10 @@
<template>
<div style="padding-bottom: 10px">
<el-card header="条件编辑">
<el-alert title="同一父级的网关只能有一个通过" type="warning" />
<el-alert title="同一父级的网关只能有一个通过" type="warning" :closable="false" />
<!-- 设置优先级 -->
<div style="padding: 40px 0 20px">
<el-select v-model="selectGateway" placeholder="请选择">
<div style="padding: 20px 0 20px" class="flex">
<el-select class="flex-1" v-model="selectGateway" placeholder="请选择">
<el-option
v-for="item in fieldList"
:key="item.id"
@@ -24,7 +23,7 @@
{{ getLabel(row.id) }}
</template>
</el-table-column>
<el-table-column label="权限">
<el-table-column label="判断方式">
<template #default="{ row }">
<el-select v-model="row.condition" placeholder="请选择判断符">
<el-option
@@ -53,27 +52,16 @@
<script setup lang="ts">
import { ref } from 'vue'
import type { PropType } from 'vue'
// import type { PropType } from 'vue'
import { Close } from '@element-plus/icons-vue'
const props = defineProps({
node: {
type: Object,
default: () => ({})
},
fieldList: {
type: Array as PropType<
{
id: string
label: string
}[]
>,
default: () => []
},
properties: {
type: Object,
default: () => ({})
}
})
import type { NodeType, PropertiesType, FieldListType } from './property.type'
const props = defineProps<{
node?: NodeType
fieldList?: FieldListType[]
properties?: PropertiesType
}>()
const conditionList = [
{
value: '==',
@@ -100,7 +88,7 @@ const selectGateway = ref('')
function getLabel(id) {
return props.fieldList.find((item) => {
if (item.id === id) {
return item.label
return true
}
})?.label
}

View File

@@ -14,7 +14,7 @@
</el-form-item>
<el-form-item label="指定部门" v-if="props.properties.userType == 1">
<el-select
<!-- <el-select
v-model="props.properties.deptId"
placeholder="请选择审批部门"
style="width: 100%"
@@ -25,14 +25,18 @@
:label="item.label"
:value="item.value"
/>
</el-select>
</el-select> -->
<el-tree-select
v-model="props.properties.deptId"
:data="deptList"
:check-strictly="true"
default-expand-all
:render-after-expand="false"
style="width: 100%"
/>
</el-form-item>
<el-form-item label="岗位" v-if="[1].includes(props.properties.userType)">
<el-select
v-model="props.properties.postId"
placeholder="请选择岗位"
style="width: 100%"
>
<el-select v-model="props.properties.postId" placeholder="请选择岗位">
<el-option
v-for="item in postList"
:key="item.value"
@@ -63,48 +67,44 @@
</div>
</template>
<script setup>
<script setup lang="ts">
import { ref } from 'vue'
import { adminLists } from '@/api/perms/admin'
import { deptLists } from '@/api/org/department'
import { adminListAll } from '@/api/perms/admin'
import { deptAll } from '@/api/org/department'
import { postAll } from '@/api/org/post'
const props = defineProps({
node: {
type: Object,
default: () => ({})
},
properties: {
type: Object,
default: () => ({})
},
fieldList: {
type: Array,
default: () => []
}
})
import { arrayToTree } from '@/utils/util'
import type { NodeType, PropertiesType, FieldListType } from './property.type'
const props = defineProps<{
node?: NodeType
fieldList?: FieldListType[]
properties?: PropertiesType
}>()
const adminUserList = ref([])
const deptList = ref([])
const postList = ref([])
function getAdminList() {
adminLists().then((res) => {
adminUserList.value = res.lists.map((item) => {
adminListAll({}).then((res) => {
adminUserList.value = res.map((item) => {
return {
value: item.id,
label: item.nickname
label: item.nickname + ' (' + item.username + ')'
}
})
})
}
function getDeptList() {
deptLists().then((res) => {
deptList.value = res.map((item) => {
deptAll().then((res) => {
const list = res.map((item) => {
return {
value: item.id,
label: item.name
label: item.name,
...item
}
})
deptList.value = arrayToTree(list, '')
})
}
function getPostList() {

View File

@@ -5,14 +5,7 @@
:title="'节点:' + node?.text?.value"
@close="close"
>
<!-- fieldList:{{ fieldList }}
<div>properties:{{ properties }}</div> -->
<!-- 开始节点 -->
<!-- {{ node }} -->
<div v-if="node.type == 'bpmn:startEvent'">
开始节点
<FieldAuth :node="node" :properties="properties" :fieldList="fieldList"></FieldAuth>
</div>
<div v-if="node.type == 'bpmn:userTask'">
@@ -21,12 +14,12 @@
</div>
<div v-if="node.type == 'bpmn:serviceTask'">
<div>系统任务</div>
<div>抄送</div>
<div>发送邮件</div>
<div>发送短信</div>
<div>发送站内消息</div>
<div>数据入库</div>
<div>都还不支持系统任务</div>
<div>都还不支持抄送</div>
<div>都还不支持发送邮件</div>
<div>都还不支持发送短信</div>
<div>都还不支持发送站内消息</div>
<div>都还不支持数据入库</div>
</div>
<div v-if="node.type == 'bpmn:exclusiveGateway'">
<Gateway :node="node" :properties="properties" :fieldList="fieldList"></Gateway>
@@ -36,48 +29,53 @@
</el-drawer>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { ref, toRaw } from 'vue'
import UserTask from './UserTask.vue'
import FieldAuth from './FieldAuth.vue'
import Gateway from './Gateway.vue'
import type { NodeType, PropertiesType, FormFieldListType, FieldListType } from './property.type'
defineOptions({
name: 'PropertyPanel'
})
const emit = defineEmits(['setProperties'])
const drawerVisible = ref(false)
const node = ref<{
type?: string
text?: {
value?: string
}
}>({})
const properties = reactive({
userType: '',
userId: '',
deptId: '',
postId: '',
const node = ref<NodeType>({})
const properties = reactive<PropertiesType>({
userType: null,
userId: null,
deptId: null,
postId: null,
fieldAuth: {},
gateway: []
})
const fieldList = ref([])
const open = (newNode, newFieldList) => {
const fieldList = ref<FieldListType[]>([])
const open = (newNode: NodeType, newFieldList: FormFieldListType[]) => {
if (newNode.type == 'bpmn:endEvent') {
return
}
node.value = newNode
properties.userType = newNode?.properties?.userType || ''
properties.userId = newNode?.properties?.userId || ''
properties.deptId = newNode?.properties?.deptId || ''
properties.postId = newNode?.properties?.postId || ''
properties.userType = newNode?.properties?.userType || null
properties.userId = newNode?.properties?.userId || null
properties.deptId = newNode?.properties?.deptId || null
properties.postId = newNode?.properties?.postId || null
properties.gateway = newNode?.properties?.gateway || []
properties.fieldAuth = newNode?.properties?.fieldAuth
? { ...newNode?.properties?.fieldAuth }
: {}
fieldList.value = newFieldList.map((item) => ({
fieldList.value = newFieldList.map((item) => {
return {
id: item?.field?.id,
label: item?.field?.options?.label,
auth: newNode?.properties?.fieldAuth?.[item?.field?.id] || 1
}))
}
})
drawerVisible.value = true
}
@@ -86,8 +84,8 @@ const close = () => {
fieldList.value.forEach((item) => {
fieldAuth[item.id] = item.auth
})
emit('setProperties', node.value, { ...properties })
properties.fieldAuth = fieldAuth
emit('setProperties', toRaw(node.value), { ...toRaw(properties) })
drawerVisible.value = false
}

View File

@@ -0,0 +1,52 @@
export type PropertiesType = {
userType?: number
userId?: string | number
deptId?: string | number
postId?: string | number
fieldAuth?: {
[key: string]: number
}
gateway?: {
id: string
value: string
condition: string
}[]
}
export type NodeType = {
id?: string
type?:
| 'bpmn:startEvent'
| 'bpmn:userTask'
| 'bpmn:serviceTask'
| 'bpmn:exclusiveGateway'
| 'bpmn:endEvent'
text?: {
value?: string
x?: number
y?: number
}
properties?: PropertiesType
x?: number
y?: number
}
// Form读取读取德列表结构
export type FormFieldListType = {
name?: string
type?: string
field?: {
id: string
options?: {
name: string
label: string
defaultValue: ''
}
type?: string //'textarea'
}
}
export type FieldListType = {
id?: string
label?: string
auth?: number
}

View File

@@ -31,7 +31,7 @@ import '@logicflow/core/dist/style/index.css'
import '@logicflow/extension/lib/style/index.css'
import DiagramToolbar from './DiagramToolbar.vue'
import DiagramSidebar from './DiagramSidebar.vue'
import PropertyPanel from './PropertyPanel/PropertyPanel.vue'
import PropertyPanel from './PropertyPanel/index.vue'
import { registerCustomElement } from './node'
defineOptions({
@@ -106,7 +106,7 @@ function initLogicFlow(data) {
// Event listener for node clicks
lf.value.on('node:click', (e) => {
console.log('Click on node', e.data)
console.log('Click on node', e.data, props.fieldList)
PropertyPanelRef.value.open(e.data, props.fieldList)
})
}
@@ -121,6 +121,8 @@ function dragInNode(type, text = '') {
// Function to set properties of a node
function setProperties(node, item) {
console.log('setProperties', node, item)
lf.value.setProperties(node.id, item)
}
// function setZIndex(node, type) {

View File

@@ -16,8 +16,10 @@
class="mt-4"
size="large"
:data="lists"
:lazy="true"
row-key="id"
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
height="calc(100vh - 220px)"
>
<el-table-column
label="菜单名称"

View File

@@ -104,6 +104,18 @@ func (ah AdminHandler) List(c *gin.Context) {
response.CheckAndRespWithData(c, res, err)
}
// ListAll 所有管理员列表
func (ah AdminHandler) ListAll(c *gin.Context) {
var listReq SystemAuthAdminListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := Service.ListAll(listReq)
response.CheckAndRespWithData(c, res, err)
}
// detail 管理员详细
func (ah AdminHandler) Detail(c *gin.Context) {
var detailReq SystemAuthAdminDetailReq

View File

@@ -206,6 +206,44 @@ func (adminSrv systemAuthAdminService) List(page request.PageReq, listReq System
}, nil
}
// List 管理员列表
func (adminSrv systemAuthAdminService) ListAll(listReq SystemAuthAdminListReq) (res []SystemAuthAdminResp, e error) {
// 分页信息
// 查询
adminTbName := core.DBTableName(&system_model.SystemAuthAdmin{})
roleTbName := core.DBTableName(&system_model.SystemAuthRole{})
deptTbName := core.DBTableName(&system_model.SystemAuthDept{})
adminModel := adminSrv.db.Table(adminTbName+" AS admin").Where("admin.is_delete = ?", 0).Joins(
fmt.Sprintf("LEFT JOIN %s ON admin.role = %s.id", roleTbName, roleTbName)).Joins(
fmt.Sprintf("LEFT JOIN %s ON admin.dept_id = %s.id", deptTbName, deptTbName)).Select(
fmt.Sprintf("admin.*, %s.name as dept, %s.name as role", deptTbName, roleTbName))
// 条件
if listReq.Username != "" {
adminModel = adminModel.Where("username like ?", "%"+listReq.Username+"%")
}
if listReq.Nickname != "" {
adminModel = adminModel.Where("nickname like ?", "%"+listReq.Nickname+"%")
}
if listReq.Role >= 0 {
adminModel = adminModel.Where("role = ?", listReq.Role)
}
// 数据
var adminResp []SystemAuthAdminResp
err := adminModel.Order("id desc, sort desc").Find(&adminResp).Error
if e = response.CheckErr(err, "列表获取失败"); e != nil {
return
}
for i := 0; i < len(adminResp); i++ {
adminResp[i].Avatar = util.UrlUtil.ToAbsoluteUrl(adminResp[i].Avatar)
if adminResp[i].ID == 1 {
adminResp[i].Role = "系统管理员"
}
}
return adminResp, nil
}
// Detail 管理员详细
func (adminSrv systemAuthAdminService) Detail(id uint) (res SystemAuthAdminResp, e error) {
var sysAdmin system_model.SystemAuthAdmin

View File

@@ -22,6 +22,7 @@ func AdminRoute(rg *gin.RouterGroup) {
rg.GET("/admin/self", handle.Self)
rg.GET("/admin/list", handle.List)
rg.GET("/admin/listAll", handle.ListAll)
rg.GET("/admin/ListByDeptId", handle.ListByDeptId)
rg.GET("/admin/detail", handle.Detail)
rg.POST("/admin/add", middleware.RecordLog("管理员新增"), handle.Add)