|
|
@@ -1,10 +1,17 @@
|
|
|
<script setup lang="ts">
|
|
|
+import { EleBtnType } from '@/types/Button/buttonType'
|
|
|
+
|
|
|
+import type {
|
|
|
+ OperationItem,
|
|
|
+ Operations,
|
|
|
+} from '@/types/Tables/Operations/operations'
|
|
|
import type {
|
|
|
TableData,
|
|
|
FilterInfo,
|
|
|
TableInfoItem,
|
|
|
BaseFieldItem,
|
|
|
TableFields,
|
|
|
+ SaveFields,
|
|
|
} from '@/types/Tables/table'
|
|
|
import type { BaseMenu } from '@/types/Promotion/Menu'
|
|
|
import type {
|
|
|
@@ -17,54 +24,68 @@ import type {
|
|
|
AdmgeTTProjFileds,
|
|
|
AdmgeTTAdFileds,
|
|
|
} from '@/types/Tables/tableData/ttAd'
|
|
|
+import type {
|
|
|
+ BaseTableInfo,
|
|
|
+ BaseAllFieldsInfo,
|
|
|
+ BaseAllFilterInfo,
|
|
|
+ BaseAllFixedFiledsInfo,
|
|
|
+} from '@/types/Tables/tablePageData'
|
|
|
|
|
|
import { TableFilterType } from '@/types/Tables/table'
|
|
|
|
|
|
import { useRequest } from '@/hooks/useRequest'
|
|
|
import { useDate } from '@/hooks/useDate'
|
|
|
-import { onMounted, reactive, ref } from 'vue'
|
|
|
+import { computed, onMounted, reactive, ref, watch } from 'vue'
|
|
|
import { useTable } from '@/hooks/useTable'
|
|
|
|
|
|
import Menu from '@/components/navigation/Menu.vue'
|
|
|
import Table from '@/components/table/Table.vue'
|
|
|
|
|
|
-interface TableInfo {
|
|
|
- [key: string]: TableInfoItem<TableData, BaseFieldItem<TableFields>>
|
|
|
+// 表格信息
|
|
|
+interface TableInfo extends BaseTableInfo {
|
|
|
account: TableInfoItem<AdmgeTTAccData, BaseFieldItem<AdmgeTTAccFileds>> // 账户信息
|
|
|
project: TableInfoItem<AdmgeTTProjData, BaseFieldItem<AdmgeTTProjFileds>> // 项目信息
|
|
|
advertise: TableInfoItem<AdmgeTTAdData, BaseFieldItem<AdmgeTTAdFileds>> // 广告信息
|
|
|
}
|
|
|
|
|
|
-interface AllFieldsInfo {
|
|
|
- [key: string]: any
|
|
|
+// 所有字段信息
|
|
|
+interface AllFieldsInfo extends BaseAllFieldsInfo {
|
|
|
account: AdmgeTTAccFileds[]
|
|
|
project: AdmgeTTProjFileds[]
|
|
|
advertise: AdmgeTTAdFileds[]
|
|
|
}
|
|
|
|
|
|
-type TableMappingKeys = 'account' | 'project' | 'advertise'
|
|
|
-
|
|
|
-interface AllFilterInfo {
|
|
|
- [key: string]: FilterInfo
|
|
|
+// 上方查询表单字段
|
|
|
+interface AllFilterInfo extends BaseAllFilterInfo {
|
|
|
account: FilterInfo
|
|
|
project: FilterInfo
|
|
|
advertise: FilterInfo
|
|
|
}
|
|
|
|
|
|
-interface AllFixedFiledsInfo {
|
|
|
- [key: string]: Array<string>
|
|
|
+// 固定字段
|
|
|
+interface AllFixedFiledsInfo extends BaseAllFixedFiledsInfo {
|
|
|
account: Array<string>
|
|
|
project: Array<string>
|
|
|
advertise: Array<string>
|
|
|
}
|
|
|
|
|
|
+// 操作信息
|
|
|
+interface Operation extends Operations {
|
|
|
+ account: OperationItem[]
|
|
|
+ project: OperationItem[]
|
|
|
+ advertise: OperationItem[]
|
|
|
+}
|
|
|
+
|
|
|
const { AllApi } = useRequest()
|
|
|
const { disableDate, shortcuts } = useDate()
|
|
|
-const { getData } = useTable()
|
|
|
+const { getData, saveTableInfo, getTableInfo, updateTableFields } = useTable()
|
|
|
|
|
|
// 当前菜单选中
|
|
|
const activeMenu = ref('account')
|
|
|
|
|
|
+// 修改或新增的弹窗控制
|
|
|
+const tableItemDialog = ref(false)
|
|
|
+
|
|
|
// 所有子字段信息
|
|
|
const AllFields: AllFieldsInfo = {
|
|
|
account: [
|
|
|
@@ -194,11 +215,15 @@ const accFilterInfo: FilterInfo = {
|
|
|
{ label: '优化师2', value: 'rose' },
|
|
|
],
|
|
|
},
|
|
|
- name: {
|
|
|
- label: '名称',
|
|
|
- name: 'name',
|
|
|
+ search: {
|
|
|
+ label: '搜索',
|
|
|
+ name: 'search',
|
|
|
type: TableFilterType.Search,
|
|
|
- value: '',
|
|
|
+ value: 'name',
|
|
|
+ options: [
|
|
|
+ { label: '名称', value: 'name' },
|
|
|
+ { label: '备注', value: 'backup' },
|
|
|
+ ],
|
|
|
},
|
|
|
product: {
|
|
|
label: '产品',
|
|
|
@@ -212,11 +237,269 @@ const accFilterInfo: FilterInfo = {
|
|
|
},
|
|
|
}
|
|
|
|
|
|
+// 项目查询表单信息
|
|
|
+const projectFilter: FilterInfo = {
|
|
|
+ search: {
|
|
|
+ label: '搜索',
|
|
|
+ name: 'search',
|
|
|
+ type: TableFilterType.Search,
|
|
|
+ value: 'name',
|
|
|
+ options: [{ label: '名称', value: 'name' }],
|
|
|
+ },
|
|
|
+ ttProject: {
|
|
|
+ label: '创量项目',
|
|
|
+ name: 'ttProject',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'all',
|
|
|
+ options: [
|
|
|
+ { label: '全部', value: 'all' },
|
|
|
+ { label: '产品A', value: 'A' },
|
|
|
+ { label: '产品B', value: 'B' },
|
|
|
+ ], // Search 类型一般不需要 options
|
|
|
+ },
|
|
|
+ product: {
|
|
|
+ label: '创量产品',
|
|
|
+ name: 'product',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'all',
|
|
|
+ options: [
|
|
|
+ { label: '全部', value: 'all' },
|
|
|
+ { label: '产品A', value: 'A' },
|
|
|
+ { label: '产品B', value: 'B' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ optimizationGoal: {
|
|
|
+ label: '优化目标',
|
|
|
+ name: 'optimizationGoal',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'clicks',
|
|
|
+ options: [
|
|
|
+ { label: '点击量', value: 'clicks' },
|
|
|
+ { label: '转化量', value: 'conversions' },
|
|
|
+ { label: '展示量', value: 'impressions' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ deepOptimizationGoal: {
|
|
|
+ label: '深度优化目标',
|
|
|
+ name: 'deepOptimizationGoal',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'ROI',
|
|
|
+ options: [
|
|
|
+ { label: '投资回报率 (ROI)', value: 'ROI' },
|
|
|
+ { label: '订单数', value: 'orders' },
|
|
|
+ { label: '注册量', value: 'registrations' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ mediaAccount: {
|
|
|
+ label: '媒体账户',
|
|
|
+ name: 'mediaAccount',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'all',
|
|
|
+ options: [
|
|
|
+ { label: '全部', value: 'all' },
|
|
|
+ { label: '账户1', value: '1' },
|
|
|
+ { label: '账户2', value: '2' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ promotionObjective: {
|
|
|
+ label: '推广目的',
|
|
|
+ name: 'promotionObjective',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'sales',
|
|
|
+ options: [
|
|
|
+ { label: '销售转化', value: 'sales' },
|
|
|
+ { label: '品牌推广', value: 'branding' },
|
|
|
+ { label: '应用安装', value: 'app_install' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ deliveryMode: {
|
|
|
+ label: '投放模式',
|
|
|
+ name: 'deliveryMode',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'automated',
|
|
|
+ options: [
|
|
|
+ { label: '自动投放', value: 'automated' },
|
|
|
+ { label: '手动投放', value: 'manual' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ status: {
|
|
|
+ label: '状态',
|
|
|
+ name: 'status',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'active',
|
|
|
+ options: [
|
|
|
+ { label: '全部', value: 'all' },
|
|
|
+ { label: '启用', value: 'active' },
|
|
|
+ { label: '暂停', value: 'paused' },
|
|
|
+ { label: '已结束', value: 'ended' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ creationTime: {
|
|
|
+ label: '创建时间',
|
|
|
+ name: 'creationTime',
|
|
|
+ type: TableFilterType.Date,
|
|
|
+ startDate: shortcuts[0].value()[0],
|
|
|
+ endDate: shortcuts[0].value()[1],
|
|
|
+ value: '',
|
|
|
+ },
|
|
|
+ adType: {
|
|
|
+ label: '广告类型',
|
|
|
+ name: 'adType',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'display',
|
|
|
+ options: [
|
|
|
+ { label: '展示广告', value: 'display' },
|
|
|
+ { label: '视频广告', value: 'video' },
|
|
|
+ { label: '搜索广告', value: 'search' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+}
|
|
|
+
|
|
|
+// 广告查询表单信息
|
|
|
+const adFilterInfo: FilterInfo = {
|
|
|
+ ttProject: {
|
|
|
+ label: '创量项目',
|
|
|
+ name: 'ttProject',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'name',
|
|
|
+ options: [{ label: '名称', value: 'name' }],
|
|
|
+ },
|
|
|
+ product: {
|
|
|
+ label: '创量产品',
|
|
|
+ name: 'product',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'all',
|
|
|
+ options: [
|
|
|
+ { label: '全部', value: 'all' },
|
|
|
+ { label: '产品A', value: 'A' },
|
|
|
+ { label: '产品B', value: 'B' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ optimizer: {
|
|
|
+ label: '优化师',
|
|
|
+ name: 'optimizer',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'all',
|
|
|
+ options: [
|
|
|
+ { label: '全部', value: 'all' },
|
|
|
+ { label: '优化师A', value: 'A' },
|
|
|
+ { label: '优化师B', value: 'B' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ diagnosticSuggestion: {
|
|
|
+ label: '诊断建议',
|
|
|
+ name: 'diagnosticSuggestion',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'all',
|
|
|
+ options: [
|
|
|
+ { label: '全部', value: 'all' },
|
|
|
+ { label: '建议A', value: 'A' },
|
|
|
+ { label: '建议B', value: 'B' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ strategyGroup: {
|
|
|
+ label: '策略组',
|
|
|
+ name: 'strategyGroup',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'all',
|
|
|
+ options: [
|
|
|
+ { label: '全部', value: 'all' },
|
|
|
+ { label: '组A', value: 'A' },
|
|
|
+ { label: '组B', value: 'B' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ learningStatus: {
|
|
|
+ label: '学习期状态',
|
|
|
+ name: 'learningStatus',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'all',
|
|
|
+ options: [
|
|
|
+ { label: '全部', value: 'all' },
|
|
|
+ { label: '进行中', value: 'ongoing' },
|
|
|
+ { label: '已完成', value: 'completed' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ mediaAssets: {
|
|
|
+ label: '信息素材',
|
|
|
+ name: 'mediaAssets',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'all',
|
|
|
+ options: [
|
|
|
+ { label: '全部', value: 'all' },
|
|
|
+ { label: '素材A', value: 'A' },
|
|
|
+ { label: '素材B', value: 'B' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ mediaAccount: {
|
|
|
+ label: '媒体账户',
|
|
|
+ name: 'mediaAccount',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'all',
|
|
|
+ options: [
|
|
|
+ { label: '全部', value: 'all' },
|
|
|
+ { label: '账户1', value: '1' },
|
|
|
+ { label: '账户2', value: '2' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ promotionObjective: {
|
|
|
+ label: '推广目的',
|
|
|
+ name: 'promotionObjective',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'all',
|
|
|
+ options: [
|
|
|
+ { label: '全部', value: 'all' },
|
|
|
+ { label: '销售', value: 'sales' },
|
|
|
+ { label: '品牌推广', value: 'branding' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ deliveryMode: {
|
|
|
+ label: '投放模式',
|
|
|
+ name: 'deliveryMode',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'all',
|
|
|
+ options: [
|
|
|
+ { label: '全部', value: 'all' },
|
|
|
+ { label: '自动投放', value: 'automated' },
|
|
|
+ { label: '手动投放', value: 'manual' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ status: {
|
|
|
+ label: '状态',
|
|
|
+ name: 'status',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'all',
|
|
|
+ options: [
|
|
|
+ { label: '全部', value: 'all' },
|
|
|
+ { label: '启用', value: 'active' },
|
|
|
+ { label: '暂停', value: 'paused' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ creationTime: {
|
|
|
+ label: '创建时间',
|
|
|
+ name: 'creationTime',
|
|
|
+ type: TableFilterType.Date,
|
|
|
+ startDate: new Date(),
|
|
|
+ endDate: new Date(),
|
|
|
+ value: '',
|
|
|
+ },
|
|
|
+ adType: {
|
|
|
+ label: '广告类型',
|
|
|
+ name: 'adType',
|
|
|
+ type: TableFilterType.Select,
|
|
|
+ value: 'all',
|
|
|
+ options: [
|
|
|
+ { label: '全部', value: 'all' },
|
|
|
+ { label: '展示广告', value: 'display' },
|
|
|
+ { label: '视频广告', value: 'video' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+}
|
|
|
+
|
|
|
// 所有的查询表单信息
|
|
|
const allFilters: AllFilterInfo = {
|
|
|
account: accFilterInfo,
|
|
|
- project: {},
|
|
|
- advertise: {},
|
|
|
+ project: projectFilter,
|
|
|
+ advertise: adFilterInfo,
|
|
|
}
|
|
|
|
|
|
// 所有需要固定的字段
|
|
|
@@ -233,31 +516,74 @@ const tableReqInfo: { [key: string]: any } = {
|
|
|
advertise: AllApi.mockAdTTAd,
|
|
|
}
|
|
|
|
|
|
-// 项目查询表单信息
|
|
|
-
|
|
|
-// 广告查询表单信息
|
|
|
-// AllFields['account']
|
|
|
+// 表格信息
|
|
|
const tableInfo = reactive<TableInfo>({
|
|
|
account: {
|
|
|
data: [],
|
|
|
- fields: [{ label: '基础', name: 'base1', children: AllFields['account'] }],
|
|
|
+ fields: [
|
|
|
+ {
|
|
|
+ label: '基础',
|
|
|
+ name: 'base1',
|
|
|
+ value: [],
|
|
|
+ children: AllFields['account'],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ tableSortedFields: [],
|
|
|
filters: allFilters['account'],
|
|
|
fixedFields: allFixedFileds['account'],
|
|
|
},
|
|
|
project: {
|
|
|
data: [],
|
|
|
- fields: [{ label: '基础', name: 'base', children: AllFields['project'] }],
|
|
|
+ fields: [
|
|
|
+ {
|
|
|
+ label: '基础',
|
|
|
+ name: 'base2',
|
|
|
+ value: [],
|
|
|
+ children: AllFields['project'],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ tableSortedFields: [],
|
|
|
filters: allFilters['project'],
|
|
|
fixedFields: allFixedFileds['project'],
|
|
|
},
|
|
|
advertise: {
|
|
|
data: [],
|
|
|
- fields: [{ label: '基础', name: 'base', children: AllFields['advertise'] }],
|
|
|
+ fields: [
|
|
|
+ {
|
|
|
+ label: '基础',
|
|
|
+ name: 'base3',
|
|
|
+ value: [],
|
|
|
+ children: AllFields['advertise'],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ tableSortedFields: [],
|
|
|
filters: allFilters['advertise'],
|
|
|
fixedFields: allFixedFileds['advertise'],
|
|
|
},
|
|
|
})
|
|
|
|
|
|
+// 自定义的操作字段
|
|
|
+const operations: Operation = {
|
|
|
+ account: [
|
|
|
+ {
|
|
|
+ label: '修改',
|
|
|
+ type: EleBtnType.Primary,
|
|
|
+ func: () => {
|
|
|
+ tableItemDialog.value = true
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '删除',
|
|
|
+ type: EleBtnType.Danger,
|
|
|
+ func: () => {
|
|
|
+ tableItemDialog.value = true
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ advertise: [],
|
|
|
+ project: [],
|
|
|
+}
|
|
|
+
|
|
|
// 导航
|
|
|
const ttAdMenu: BaseMenu[] = [
|
|
|
{
|
|
|
@@ -278,6 +604,14 @@ const ttAdMenu: BaseMenu[] = [
|
|
|
const selectDate = ref(shortcuts[0].value())
|
|
|
|
|
|
/**
|
|
|
+ * @description: 保存的文件名
|
|
|
+ * @return {*}
|
|
|
+ */
|
|
|
+const fileName = computed(() => {
|
|
|
+ return `ttad-${activeMenu.value}-tableInfo`
|
|
|
+})
|
|
|
+
|
|
|
+/**
|
|
|
* @description: 日期改变
|
|
|
* @param {*} val
|
|
|
* @return {*}
|
|
|
@@ -297,10 +631,25 @@ const menuActiveChange = (val: string) => {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * @description: 更新表格的字段信息
|
|
|
+ * @return {*}
|
|
|
+ */
|
|
|
+const updateTableInfo = () => {
|
|
|
+ let info = getTableInfo(fileName.value)
|
|
|
+
|
|
|
+ if (info) {
|
|
|
+ tableInfo[activeMenu.value].fields = info.fields
|
|
|
+ tableInfo[activeMenu.value].tableSortedFields = info.tableSortedFields
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
* @description: 更新表格数据
|
|
|
* @return {*}
|
|
|
*/
|
|
|
const updateTableData = () => {
|
|
|
+ updateTableInfo()
|
|
|
+
|
|
|
getData(tableReqInfo[activeMenu.value]).then((res: Array<TableData>) => {
|
|
|
tableInfo[activeMenu.value].data.splice(
|
|
|
0,
|
|
|
@@ -310,30 +659,37 @@ const updateTableData = () => {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
-const saveTableInfo = () => {
|
|
|
- localStorage.setItem(`ttadTableInfo`, JSON.stringify(tableInfo))
|
|
|
-}
|
|
|
-
|
|
|
-const getTableInfo = (): TableInfo => {
|
|
|
- let info = localStorage.getItem(`ttadTableInfo`)
|
|
|
- if (!info) return {} as any
|
|
|
- return JSON.parse(info) as TableInfo
|
|
|
-}
|
|
|
-
|
|
|
+/**
|
|
|
+ * @description: 更新自定义指标和表格字段
|
|
|
+ * @param {*} newIndicator 新的指标信息
|
|
|
+ * @param {*} newSortedTablefileds 新的表格字段信息
|
|
|
+ * @return {*}
|
|
|
+ */
|
|
|
const updateCustomIndicator = (
|
|
|
newIndicator: Array<BaseFieldItem<TableFields>>,
|
|
|
+ newSortedTablefileds: Array<TableFields>,
|
|
|
) => {
|
|
|
- let activeTableFields = tableInfo[activeMenu.value].fields
|
|
|
- activeTableFields.splice(0, activeTableFields.length, ...newIndicator)
|
|
|
- saveTableInfo()
|
|
|
+ updateTableFields(
|
|
|
+ tableInfo,
|
|
|
+ activeMenu.value,
|
|
|
+ newIndicator,
|
|
|
+ newSortedTablefileds,
|
|
|
+ )
|
|
|
+ .then(() => {
|
|
|
+ saveTableInfo(fileName.value, tableInfo[activeMenu.value])
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ ElMessage.error('更新失败')
|
|
|
+ })
|
|
|
+ // saveTableInfo()
|
|
|
}
|
|
|
|
|
|
updateTableData()
|
|
|
onMounted(() => {
|
|
|
- let info: TableInfo = getTableInfo()
|
|
|
- if (Object.keys(info).length !== 0) {
|
|
|
- Object.assign(tableInfo, info)
|
|
|
- }
|
|
|
+ // let info = getTableInfo(fileName.value)
|
|
|
+ // if (Object.keys(info).length !== 0) {
|
|
|
+ // Object.assign(tableInfo, info)
|
|
|
+ // }
|
|
|
})
|
|
|
</script>
|
|
|
|
|
|
@@ -367,12 +723,29 @@ onMounted(() => {
|
|
|
<div class="ttAdContent">
|
|
|
<Table
|
|
|
:table-fields="tableInfo[activeMenu].fields"
|
|
|
+ :sorted-table-fields="tableInfo[activeMenu].tableSortedFields"
|
|
|
:table-data="tableInfo[activeMenu].data"
|
|
|
:fixed-fields="tableInfo[activeMenu].fixedFields"
|
|
|
:filters-info="tableInfo[activeMenu].filters"
|
|
|
@update-custom-indicator="updateCustomIndicator"
|
|
|
- ></Table>
|
|
|
+ >
|
|
|
+ <template #operations>
|
|
|
+ <div>
|
|
|
+ <el-button
|
|
|
+ text
|
|
|
+ :type="item.type"
|
|
|
+ v-for="item in operations[activeMenu]"
|
|
|
+ @click="item.func"
|
|
|
+ >
|
|
|
+ {{ item.label }}
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </Table>
|
|
|
</div>
|
|
|
+ <el-dialog v-model="tableItemDialog" title="Tips" width="500">
|
|
|
+ <span>This is a message</span>
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|