mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 04:08:43 +08:00 
			
		
		
		
	feat: add vue3(element-plus)
This commit is contained in:
		
							
								
								
									
										189
									
								
								yudao-ui-admin-vue3/src/views/system/notice/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										189
									
								
								yudao-ui-admin-vue3/src/views/system/notice/index.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,189 @@
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
import { ref, unref } from 'vue'
 | 
			
		||||
import dayjs from 'dayjs'
 | 
			
		||||
import { ElMessage } from 'element-plus'
 | 
			
		||||
import { DICT_TYPE } from '@/utils/dict'
 | 
			
		||||
import { useTable } from '@/hooks/web/useTable'
 | 
			
		||||
import { useI18n } from '@/hooks/web/useI18n'
 | 
			
		||||
import { FormExpose } from '@/components/Form'
 | 
			
		||||
import type { NoticeVO } from '@/api/system/notice/types'
 | 
			
		||||
import { rules, allSchemas } from './notice.data'
 | 
			
		||||
import * as NoticeApi from '@/api/system/notice'
 | 
			
		||||
const { t } = useI18n() // 国际化
 | 
			
		||||
// ========== 列表相关 ==========
 | 
			
		||||
const { register, tableObject, methods } = useTable<PageResult<NoticeVO>, NoticeVO>({
 | 
			
		||||
  getListApi: NoticeApi.getNoticePageApi,
 | 
			
		||||
  delListApi: NoticeApi.deleteNoticeApi
 | 
			
		||||
})
 | 
			
		||||
const { getList, setSearchParams, delList } = methods
 | 
			
		||||
 | 
			
		||||
// ========== CRUD 相关 ==========
 | 
			
		||||
const actionLoading = ref(false) // 遮罩层
 | 
			
		||||
const actionType = ref('') // 操作按钮的类型
 | 
			
		||||
const dialogVisible = ref(false) // 是否显示弹出层
 | 
			
		||||
const dialogTitle = ref('edit') // 弹出层标题
 | 
			
		||||
const formRef = ref<FormExpose>() // 表单 Ref
 | 
			
		||||
 | 
			
		||||
// 设置标题
 | 
			
		||||
const setDialogTile = (type: string) => {
 | 
			
		||||
  dialogTitle.value = t('action.' + type)
 | 
			
		||||
  actionType.value = type
 | 
			
		||||
  dialogVisible.value = true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 新增操作
 | 
			
		||||
const handleCreate = () => {
 | 
			
		||||
  setDialogTile('create')
 | 
			
		||||
  // 重置表单
 | 
			
		||||
  unref(formRef)?.getElFormRef()?.resetFields()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 修改操作
 | 
			
		||||
const handleUpdate = async (row: NoticeVO) => {
 | 
			
		||||
  setDialogTile('update')
 | 
			
		||||
  // 设置数据
 | 
			
		||||
  const res = await NoticeApi.getNoticeApi(row.id)
 | 
			
		||||
  unref(formRef)?.setValues(res)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 提交按钮
 | 
			
		||||
const submitForm = async () => {
 | 
			
		||||
  actionLoading.value = true
 | 
			
		||||
  // 提交请求
 | 
			
		||||
  try {
 | 
			
		||||
    const data = unref(formRef)?.formModel as NoticeVO
 | 
			
		||||
    if (actionType.value === 'create') {
 | 
			
		||||
      await NoticeApi.createNoticeApi(data)
 | 
			
		||||
      ElMessage.success(t('common.createSuccess'))
 | 
			
		||||
    } else {
 | 
			
		||||
      await NoticeApi.updateNoticeApi(data)
 | 
			
		||||
      ElMessage.success(t('common.updateSuccess'))
 | 
			
		||||
    }
 | 
			
		||||
    // 操作成功,重新加载列表
 | 
			
		||||
    dialogVisible.value = false
 | 
			
		||||
    await getList()
 | 
			
		||||
  } finally {
 | 
			
		||||
    actionLoading.value = false
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 删除操作
 | 
			
		||||
const handleDelete = (row: NoticeVO) => {
 | 
			
		||||
  delList(row.id, false)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ========== 详情相关 ==========
 | 
			
		||||
const detailRef = ref() // 详情 Ref
 | 
			
		||||
 | 
			
		||||
// 详情操作
 | 
			
		||||
const handleDetail = async (row: NoticeVO) => {
 | 
			
		||||
  // 设置数据
 | 
			
		||||
  detailRef.value = row
 | 
			
		||||
  setDialogTile('detail')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ========== 初始化 ==========
 | 
			
		||||
getList()
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
  <!-- 搜索工作区 -->
 | 
			
		||||
  <ContentWrap>
 | 
			
		||||
    <Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
 | 
			
		||||
  </ContentWrap>
 | 
			
		||||
  <ContentWrap>
 | 
			
		||||
    <!-- 操作工具栏 -->
 | 
			
		||||
    <div class="mb-10px">
 | 
			
		||||
      <el-button type="primary" v-hasPermi="['system:notice:create']" @click="handleCreate">
 | 
			
		||||
        <Icon icon="el:zoom-in" class="mr-5px" /> {{ t('action.add') }}
 | 
			
		||||
      </el-button>
 | 
			
		||||
    </div>
 | 
			
		||||
    <!-- 列表 -->
 | 
			
		||||
    <Table
 | 
			
		||||
      :columns="allSchemas.tableColumns"
 | 
			
		||||
      :selection="false"
 | 
			
		||||
      :data="tableObject.tableList"
 | 
			
		||||
      :loading="tableObject.loading"
 | 
			
		||||
      :pagination="{
 | 
			
		||||
        total: tableObject.total
 | 
			
		||||
      }"
 | 
			
		||||
      v-model:pageSize="tableObject.pageSize"
 | 
			
		||||
      v-model:currentPage="tableObject.currentPage"
 | 
			
		||||
      @register="register"
 | 
			
		||||
    >
 | 
			
		||||
      <template #type="{ row }">
 | 
			
		||||
        <DictTag :type="DICT_TYPE.SYSTEM_NOTICE_TYPE" :value="row.type" />
 | 
			
		||||
      </template>
 | 
			
		||||
      <template #status="{ row }">
 | 
			
		||||
        <DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />
 | 
			
		||||
      </template>
 | 
			
		||||
      <template #createTime="{ row }">
 | 
			
		||||
        <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
 | 
			
		||||
      </template>
 | 
			
		||||
      <template #action="{ row }">
 | 
			
		||||
        <el-button
 | 
			
		||||
          link
 | 
			
		||||
          type="primary"
 | 
			
		||||
          v-hasPermi="['system:notice:update']"
 | 
			
		||||
          @click="handleUpdate(row)"
 | 
			
		||||
        >
 | 
			
		||||
          <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
 | 
			
		||||
        </el-button>
 | 
			
		||||
        <el-button
 | 
			
		||||
          link
 | 
			
		||||
          type="primary"
 | 
			
		||||
          v-hasPermi="['system:notice:update']"
 | 
			
		||||
          @click="handleDetail(row)"
 | 
			
		||||
        >
 | 
			
		||||
          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
 | 
			
		||||
        </el-button>
 | 
			
		||||
        <el-button
 | 
			
		||||
          link
 | 
			
		||||
          type="primary"
 | 
			
		||||
          v-hasPermi="['system:notice:delete']"
 | 
			
		||||
          @click="handleDelete(row)"
 | 
			
		||||
        >
 | 
			
		||||
          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
 | 
			
		||||
        </el-button>
 | 
			
		||||
      </template>
 | 
			
		||||
    </Table>
 | 
			
		||||
  </ContentWrap>
 | 
			
		||||
 | 
			
		||||
  <Dialog v-model="dialogVisible" :title="dialogTitle" maxHeight="500px" width="50%">
 | 
			
		||||
    <!-- 对话框(添加 / 修改) -->
 | 
			
		||||
    <Form
 | 
			
		||||
      v-if="['create', 'update'].includes(actionType)"
 | 
			
		||||
      :schema="allSchemas.formSchema"
 | 
			
		||||
      :rules="rules"
 | 
			
		||||
      ref="formRef"
 | 
			
		||||
    />
 | 
			
		||||
    <!-- 对话框(详情) -->
 | 
			
		||||
    <Descriptions
 | 
			
		||||
      v-if="actionType === 'detail'"
 | 
			
		||||
      :schema="allSchemas.detailSchema"
 | 
			
		||||
      :data="detailRef"
 | 
			
		||||
    >
 | 
			
		||||
      <template #type="{ row }">
 | 
			
		||||
        <DictTag :type="DICT_TYPE.SYSTEM_NOTICE_TYPE" :value="row.type" />
 | 
			
		||||
      </template>
 | 
			
		||||
      <template #status="{ row }">
 | 
			
		||||
        <DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />
 | 
			
		||||
      </template>
 | 
			
		||||
      <template #createTime="{ row }">
 | 
			
		||||
        <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
 | 
			
		||||
      </template>
 | 
			
		||||
    </Descriptions>
 | 
			
		||||
    <!-- 操作按钮 -->
 | 
			
		||||
    <template #footer>
 | 
			
		||||
      <el-button
 | 
			
		||||
        v-if="['create', 'update'].includes(actionType)"
 | 
			
		||||
        type="primary"
 | 
			
		||||
        :loading="actionLoading"
 | 
			
		||||
        @click="submitForm"
 | 
			
		||||
      >
 | 
			
		||||
        {{ t('action.save') }}
 | 
			
		||||
      </el-button>
 | 
			
		||||
      <el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
 | 
			
		||||
    </template>
 | 
			
		||||
  </Dialog>
 | 
			
		||||
</template>
 | 
			
		||||
							
								
								
									
										86
									
								
								yudao-ui-admin-vue3/src/views/system/notice/notice.data.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								yudao-ui-admin-vue3/src/views/system/notice/notice.data.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,86 @@
 | 
			
		||||
import { reactive } from 'vue'
 | 
			
		||||
import { useI18n } from '@/hooks/web/useI18n'
 | 
			
		||||
import { required } from '@/utils/formRules'
 | 
			
		||||
import { DICT_TYPE } from '@/utils/dict'
 | 
			
		||||
import { CrudSchema, useCrudSchemas } from '@/hooks/web/useCrudSchemas'
 | 
			
		||||
const { t } = useI18n() // 国际化
 | 
			
		||||
 | 
			
		||||
// 表单校验
 | 
			
		||||
export const rules = reactive({
 | 
			
		||||
  title: [required],
 | 
			
		||||
  type: [required],
 | 
			
		||||
  status: [required]
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
// CrudSchema
 | 
			
		||||
const crudSchemas = reactive<CrudSchema[]>([
 | 
			
		||||
  {
 | 
			
		||||
    label: t('common.index'),
 | 
			
		||||
    field: 'id',
 | 
			
		||||
    type: 'index',
 | 
			
		||||
    form: {
 | 
			
		||||
      show: false
 | 
			
		||||
    },
 | 
			
		||||
    detail: {
 | 
			
		||||
      show: false
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    label: '公告标题',
 | 
			
		||||
    field: 'title',
 | 
			
		||||
    search: {
 | 
			
		||||
      show: true
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    label: '公告类型',
 | 
			
		||||
    field: 'type',
 | 
			
		||||
    dictType: DICT_TYPE.SYSTEM_NOTICE_TYPE,
 | 
			
		||||
    search: {
 | 
			
		||||
      show: true
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    label: t('common.status'),
 | 
			
		||||
    field: 'status',
 | 
			
		||||
    dictType: DICT_TYPE.COMMON_STATUS,
 | 
			
		||||
    search: {
 | 
			
		||||
      show: true
 | 
			
		||||
    },
 | 
			
		||||
    form: {
 | 
			
		||||
      component: 'RadioButton'
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    label: '公告内容',
 | 
			
		||||
    field: 'content',
 | 
			
		||||
    form: {
 | 
			
		||||
      component: 'Editor',
 | 
			
		||||
      colProps: {
 | 
			
		||||
        span: 24
 | 
			
		||||
      },
 | 
			
		||||
      componentProps: {
 | 
			
		||||
        valueHtml: ''
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    label: t('common.createTime'),
 | 
			
		||||
    field: 'createTime',
 | 
			
		||||
    form: {
 | 
			
		||||
      show: false
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    label: t('table.action'),
 | 
			
		||||
    field: 'action',
 | 
			
		||||
    width: '240px',
 | 
			
		||||
    form: {
 | 
			
		||||
      show: false
 | 
			
		||||
    },
 | 
			
		||||
    detail: {
 | 
			
		||||
      show: false
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
])
 | 
			
		||||
export const { allSchemas } = useCrudSchemas(crudSchemas)
 | 
			
		||||
		Reference in New Issue
	
	Block a user