style:大屏管理-dropdown组件优化

main
黄伟杰 4 weeks ago
parent f7dc112b15
commit c5cd170d47

@ -1,43 +1,21 @@
<template> <template>
<ContentWrap> <ContentWrap>
<el-form <el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="80px">
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="80px"
>
<el-form-item label="名称" prop="name"> <el-form-item label="名称" prop="name">
<el-input <el-input
v-model="queryParams.name" v-model="queryParams.name" placeholder="请输入名称" clearable @keyup.enter="handleQuery"
placeholder="请输入名称" class="!w-240px" />
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input <el-input
v-model="queryParams.remark" v-model="queryParams.remark" placeholder="请输入备注" clearable @keyup.enter="handleQuery"
placeholder="请输入备注" class="!w-240px" />
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item> </el-form-item>
<el-form-item label="启用状态" prop="state"> <el-form-item label="启用状态" prop="state">
<el-select <el-select v-model="queryParams.state" placeholder="请选择启用状态" clearable class="!w-240px">
v-model="queryParams.state"
placeholder="请选择启用状态"
clearable
class="!w-240px"
>
<el-option <el-option
v-for="dict in getStrDictOptions(DICT_TYPE.COMMON_STATUS)" v-for="dict in getStrDictOptions(DICT_TYPE.COMMON_STATUS)" :key="dict.value" :label="dict.label"
:key="dict.value" :value="dict.value" />
:label="dict.label"
:value="dict.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -58,23 +36,10 @@
<div class="dashboard-card-list"> <div class="dashboard-card-list">
<el-empty v-if="!loading && list.length === 0" description="暂无数据" /> <el-empty v-if="!loading && list.length === 0" description="暂无数据" />
<el-row v-else :gutter="16"> <el-row v-else :gutter="16">
<el-col <el-col v-for="item in list" :key="item.id" :xl="6" :lg="8" :md="12" :sm="24" :xs="24" class="mb-16px">
v-for="item in list"
:key="item.id"
:xl="6"
:lg="8"
:md="12"
:sm="24"
:xs="24"
class="mb-16px"
>
<el-card shadow="hover" class="dashboard-card" :body-style="{ padding: '0' }"> <el-card shadow="hover" class="dashboard-card" :body-style="{ padding: '0' }">
<div class="dashboard-card-image-wrapper" @click="handlePreview(item)"> <div class="dashboard-card-image-wrapper" @click="handlePreview(item)">
<img <img class="dashboard-card-image" :src="getDashboardImage(item)" alt="封面图" />
class="dashboard-card-image"
:src="getDashboardImage(item)"
alt="封面图"
/>
<div class="dashboard-card-state"> <div class="dashboard-card-state">
<el-tag v-if="item.state === 1" type="success" size="small"> <el-tag v-if="item.state === 1" type="success" size="small">
启用 启用
@ -94,43 +59,31 @@
</div> </div>
</div> </div>
<div class="dashboard-card-actions"> <div class="dashboard-card-actions">
<el-popover placement="bottom-end" trigger="click" width="140"> <el-dropdown trigger="click" placement="bottom-end">
<div class="dashboard-card-menu">
<el-button type="primary" text @click="openEditDialog(item)">
编辑
</el-button>
<el-button type="danger" text @click="handleDelete(item)">
删除
</el-button>
</div>
<template #reference>
<el-button text circle> <el-button text circle>
<Icon icon="ep:more" /> <Icon icon="ep:more" />
</el-button> </el-button>
</template> <template #dropdown>
</el-popover> <el-dropdown-menu class="dashboard-card-menu">
<el-dropdown-item class="dashboard-card-menu-primary" @click="openEditDialog(item)"></el-dropdown-item>
<el-dropdown-item divided class="dashboard-card-menu-danger" @click="handleDelete(item)"></el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div> </div>
</div> </div>
</el-card> </el-card>
</el-col> </el-col>
</el-row> </el-row>
<Pagination <Pagination
v-if="total > 0" v-if="total > 0" :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
:total="total" @pagination="getList" />
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</div> </div>
</ContentWrap> </ContentWrap>
<el-dialog <el-dialog
v-model="createDialogVisible" v-model="createDialogVisible" :title="dialogMode === 'create' ? '新增数据大屏' : '编辑数据大屏'" width="600px"
:title="dialogMode === 'create' ? '新增数据大屏' : '编辑数据大屏'" draggable @closed="handleCreateDialogClosed">
width="600px"
draggable
@closed="handleCreateDialogClosed"
>
<el-form :model="createForm" ref="createFormRef" label-width="80px" :rules="createFormRules"> <el-form :model="createForm" ref="createFormRef" label-width="80px" :rules="createFormRules">
<el-form-item label="名称" prop="name"> <el-form-item label="名称" prop="name">
<el-input v-model="createForm.name" placeholder="请输入名称" /> <el-input v-model="createForm.name" placeholder="请输入名称" />
@ -138,104 +91,51 @@
<el-form-item label="大屏类型" prop="type"> <el-form-item label="大屏类型" prop="type">
<el-select v-model="createForm.type" placeholder="请选择大屏类型" class="!w-240px"> <el-select v-model="createForm.type" placeholder="请选择大屏类型" class="!w-240px">
<el-option <el-option
v-for="dict in getStrDictOptions('mes_goview_type')" v-for="dict in getStrDictOptions('mes_goview_type')" :key="dict.value" :label="dict.label"
:key="dict.value" :value="dict.value" />
:label="dict.label"
:value="dict.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="产线" prop="orgId"> <el-form-item label="产线" prop="orgId">
<el-tree-select <el-tree-select
v-model="createForm.orgId" v-model="createForm.orgId" :data="organizationTree" :props="lineTreeProps" filterable clearable
:data="organizationTree" class="!w-240px" placeholder="请选择产线" @change="handleOrgChange" />
:props="lineTreeProps"
filterable
clearable
class="!w-240px"
placeholder="请选择产线"
@change="handleOrgChange"
/>
</el-form-item> </el-form-item>
<el-form-item label="设备" v-if="createForm.type === '1'"> <el-form-item label="设备" v-if="createForm.type === '1'">
<div class="dashboard-device-group-list"> <div class="dashboard-device-group-list">
<div <div v-for="(group, index) in deviceAttrSelections" :key="index" class="dashboard-device-group">
v-for="(group, index) in deviceAttrSelections"
:key="index"
class="dashboard-device-group"
>
<el-select <el-select
v-model="group.deviceId" v-model="group.deviceId" placeholder="请选择设备" clearable filterable class="!w-160px mr-8px"
placeholder="请选择设备" @change="(val) => handleDeviceChange(val, index)">
clearable <el-option v-for="item in deviceList" :key="item.id" :label="item.deviceName" :value="item.id" />
filterable
class="!w-160px mr-8px"
@change="(val) => handleDeviceChange(val, index)"
>
<el-option
v-for="item in deviceList"
:key="item.id"
:label="item.deviceName"
:value="item.id"
/>
</el-select> </el-select>
<el-select <el-select
v-model="group.attributeIds" v-model="group.attributeIds" multiple collapse-tags collapse-tags-tooltip
multiple :disabled="!group.deviceId" placeholder="请选择点位" clearable filterable class="!w-260px">
collapse-tags
collapse-tags-tooltip
:disabled="!group.deviceId"
placeholder="请选择点位"
clearable
filterable
class="!w-260px"
>
<el-option <el-option
v-for="attr in (deviceAttributeOptionsMap[String(group.deviceId)] || [])" v-for="attr in (deviceAttributeOptionsMap[String(group.deviceId)] || [])" :key="attr.id"
:key="attr.id" :label="attr.attributeName" :value="attr.id" />
:label="attr.attributeName"
:value="attr.id"
/>
</el-select> </el-select>
<el-button <el-button
v-if="deviceAttrSelections.length > 1" v-if="deviceAttrSelections.length > 1" type="danger" text class="dashboard-device-remove-btn"
type="danger" @click="removeDeviceAttrGroup(index)" circle>
text
class="dashboard-device-remove-btn"
@click="removeDeviceAttrGroup(index)"
circle
>
<Icon icon="ep:minus" /> <Icon icon="ep:minus" />
</el-button> </el-button>
</div> </div>
<el-button <el-button
type="primary" type="primary" text @click="addDeviceAttrGroup" :disabled="deviceAttrSelections.length >= 8"
text class="mt-8px">
@click="addDeviceAttrGroup"
:disabled="deviceAttrSelections.length >= 8"
class="mt-8px"
>
<Icon icon="ep:plus" class="mr-5px" /> 添加设备 <Icon icon="ep:plus" class="mr-5px" /> 添加设备
</el-button> </el-button>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="内容"> <el-form-item label="内容">
<el-input <el-input v-model="createForm.content" type="textarea" :rows="4" placeholder="请输入内容" />
v-model="createForm.content"
type="textarea"
:rows="4"
placeholder="请输入内容"
/>
</el-form-item> </el-form-item>
<el-form-item label="备注"> <el-form-item label="备注">
<el-input v-model="createForm.remark" placeholder="请输入备注" /> <el-input v-model="createForm.remark" placeholder="请输入备注" />
</el-form-item> </el-form-item>
<el-form-item label="启用状态"> <el-form-item label="启用状态">
<el-switch <el-switch v-model="createForm.state" :active-value="1" :inactive-value="0" />
v-model="createForm.state"
:active-value="1"
:inactive-value="0"
/>
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@ -425,7 +325,7 @@ const normalizeDeviceIdsList = (val: any): { deviceId: number; attributesIds: nu
if (Array.isArray(parsed)) { if (Array.isArray(parsed)) {
return normalizeDeviceIdsList(parsed) return normalizeDeviceIdsList(parsed)
} }
} catch {} } catch { }
} }
const ids = trimmed const ids = trimmed
.split(',') .split(',')
@ -456,9 +356,9 @@ const openEditDialog = (item: DashboardItem) => {
deviceAttrSelections.value = deviceAttrSelections.value =
createForm.deviceIdsList && createForm.deviceIdsList.length createForm.deviceIdsList && createForm.deviceIdsList.length
? createForm.deviceIdsList.slice(0, 8).map((g) => ({ ? createForm.deviceIdsList.slice(0, 8).map((g) => ({
deviceId: g.deviceId, deviceId: g.deviceId,
attributeIds: Array.isArray(g.attributesIds) ? g.attributesIds.slice() : [] attributeIds: Array.isArray(g.attributesIds) ? g.attributesIds.slice() : []
})) }))
: [{ deviceId: undefined, attributeIds: [] }] : [{ deviceId: undefined, attributeIds: [] }]
deviceAttrSelections.value.forEach((g) => { deviceAttrSelections.value.forEach((g) => {
if (g.deviceId) { if (g.deviceId) {
@ -546,7 +446,7 @@ const handleDelete = async (item: DashboardItem) => {
}) })
message.success('删除成功') message.success('删除成功')
await getList() await getList()
} catch {} } catch { }
} }
const loadOrganizationTree = async () => { const loadOrganizationTree = async () => {
@ -690,6 +590,26 @@ onMounted(() => {
min-width: 120px; min-width: 120px;
} }
:deep(.el-dropdown-menu__item.dashboard-card-menu-primary) {
color: var(--el-color-primary);
}
:deep(.el-dropdown-menu__item.dashboard-card-menu-primary:hover),
:deep(.el-dropdown-menu__item.dashboard-card-menu-primary:focus) {
color: var(--el-color-primary);
background-color: var(--el-color-primary-light-9);
}
:deep(.el-dropdown-menu__item.dashboard-card-menu-danger) {
color: var(--el-color-danger);
}
:deep(.el-dropdown-menu__item.dashboard-card-menu-danger:hover),
:deep(.el-dropdown-menu__item.dashboard-card-menu-danger:focus) {
color: var(--el-color-danger);
background-color: var(--el-color-danger-light-9);
}
.dashboard-device-group-list { .dashboard-device-group-list {
display: flex; display: flex;
flex-direction: column; flex-direction: column;

Loading…
Cancel
Save