潘志宝
2024-11-02 2cb862114a5701434966020e3d86a9e57b88b51a
提交 | 用户 | 时间
b1d33f 1 <template>
2   <!-- 搜索工作栏 -->
3   <ContentWrap>
4     <el-form ref="queryFormRef" :inline="true" :model="queryParams" class="-mb-15px"
5              label-width="68px">
6       <el-form-item label="计划编码" prop="itemNo">
7         <el-input v-model="queryParams.itemNo" class="!w-200px" clearable placeholder="请输入计划编码"
8                   @keyup.enter="handleQuery"/>
9       </el-form-item>
10       <el-form-item label="计划名称" prop="itemName">
11         <el-input v-model="queryParams.itemName" class="!w-200px" clearable placeholder="请输入计划名称"
12                   @keyup.enter="handleQuery"/>
13       </el-form-item>
14       <el-form-item>
15         <el-button @click="handleQuery">
16           <Icon class="mr-5px" icon="ep:search"/>
17           搜索
18         </el-button>
19         <el-button @click="resetQuery">
20           <Icon class="mr-5px" icon="ep:refresh"/>
21           重置
22         </el-button>
23         <el-button
24           v-hasPermi="['data:ind-item:create']"
25           plain
26           type="primary"
27           @click="openForm('create')"
28         >
29           <Icon class="mr-5px" icon="ep:plus"/>
30           新增
31         </el-button>
32       </el-form-item>
33     </el-form>
34   </ContentWrap>
35
36   <!-- 列表 -->
37   <ContentWrap>
38     <el-table v-loading="loading" :data="list">
39       <el-table-column prop="itemNo" label="计划编码" header-align="center" align="center" min-width="80"/>
40       <el-table-column prop="itemName" label="计划名称" header-align="center" align="center" min-width="120"/>
41       <el-table-column prop="itemCategoryName" label="计划分类" header-align="center" align="center" min-width="100"/>
42       <el-table-column prop="timeGranularity" label="时间粒度" header-align="center" align="center" min-width="40">
43         <template #default="scope">
44           <dict-tag :type="DICT_TYPE.TIME_GRANULARITY" :value="scope.row.timeGranularity" />
45         </template>
46       </el-table-column>
47       <el-table-column
48         :formatter="dateFormatter"
49         align="center"
50         label="创建时间"
51         prop="createTime"
52         width="180"/>
53       <el-table-column align="center" label="操作">
54         <template #default="scope">
55           <el-button
56             v-hasPermi="['data:ind-item:update']"
57             link
58             type="primary"
2cb862 59             @click="openForm('update', scope.row.id)">
b1d33f 60             修改
61           </el-button>
62           <el-button
63             v-hasPermi="['data:ind-item:delete']"
64             link
65             type="danger"
66             @click="handleDelete(scope.row.id)">
67             删除
68           </el-button>
69         </template>
70       </el-table-column>
71     </el-table>
72     <!-- 分页 -->
73     <Pagination
74       v-model:limit="queryParams.pageSize"
75       v-model:page="queryParams.pageNo"
76       :total="total"
77       @pagination="getList"
78     />
79   </ContentWrap>
80
81   <!-- 表单弹窗:添加/修改 -->
82   <ItemForm ref="formRef" @success="getList" />
83 </template>
84
85 <script lang="ts" setup>
86 import { DICT_TYPE, getIntDictOptions, getStrDictOptions } from '@/utils/dict'
87 import { dateFormatter } from '@/utils/formatTime'
88 import ItemForm from './ItemForm.vue'
89 import download from '@/utils/download'
90 import * as ItemApi from '@/api/data/plan/item'
91 import * as CategoryApi from "@/api/data/plan/category";
92
93 defineOptions({ name: 'PlanItem' })
94
95 const message = useMessage() // 消息弹窗
96 const { t } = useI18n() // 国际化
97 const dataCategoryList = ref([] as CategoryApi.IndItemCategoryVO[])
98 const loading = ref(true) // 列表的加载中
99 const total = ref(0) // 列表的总页数
100 const list = ref([]) // 字典表格数据
101 const queryParams = reactive({
102   pageNo: 1,
103   pageSize: 10,
104   itemNo: '',
105   itemName: '',
106   itemCategory: ''
107 })
108 const queryFormRef = ref() // 搜索的表单
109 const exportLoading = ref(false) // 导出的加载中
110
111 /** 查询字典类型列表 */
112 const getList = async () => {
113   loading.value = true
114   try {
115     const data = await ItemApi.getItemPage(queryParams)
116     list.value = data.list
117     total.value = data.total
118     dataCategoryList.value = await CategoryApi.getCategoryListAllSimple()
119   } finally {
120     loading.value = false
121   }
122 }
123
124 /** 搜索按钮操作 */
125 const handleQuery = () => {
126   queryParams.pageNo = 1
127   getList()
128 }
129
130 /** 重置按钮操作 */
131 const resetQuery = () => {
132   queryFormRef.value.resetFields()
133   handleQuery()
134 }
135
136 /** 添加/修改操作 */
137 const formRef = ref()
138 const openForm = (type: string, id?: number) => {
139   formRef.value.open(type, id)
140 }
141
142 /** 删除按钮操作 */
143 const handleDelete = async (id: number) => {
144   try {
145     // 删除的二次确认
146     await message.delConfirm()
147     // 发起删除
148     await ItemApi.deleteItem(id)
149     message.success(t('common.delSuccess'))
150     // 刷新列表
151     await getList()
152   } catch {}
153 }
154
155 /** 初始化 **/
156 onMounted(() => {
157   getList()
158 })
159 </script>