index.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. <template>
  2. <ContentWrap>
  3. <!-- 搜索工作栏 -->
  4. <el-form
  5. class="-mb-15px"
  6. :model="queryParams"
  7. ref="queryFormRef"
  8. :inline="true"
  9. label-width="68px"
  10. >
  11. <el-form-item label="名称" prop="name" v-hasPermi="['menduner:system:school:query']">
  12. <el-input
  13. v-model="queryParams.name"
  14. placeholder="请输入学校名称"
  15. clearable
  16. @keyup.enter="handleQuery"
  17. class="!w-240px"
  18. />
  19. </el-form-item>
  20. <el-form-item label="区域" prop="areaId" v-hasPermi="['menduner:system:school:query']">
  21. <el-input
  22. v-model="queryParams.areaId"
  23. placeholder="请输入学校所在区域"
  24. clearable
  25. @keyup.enter="handleQuery"
  26. class="!w-240px"
  27. />
  28. </el-form-item>
  29. <el-form-item label="地址" prop="address" v-hasPermi="['menduner:system:school:query']">
  30. <el-input
  31. v-model="queryParams.address"
  32. placeholder="请输入学校所在地址"
  33. clearable
  34. @keyup.enter="handleQuery"
  35. class="!w-240px"
  36. />
  37. </el-form-item>
  38. <el-form-item label="经度" prop="longitude" v-hasPermi="['menduner:system:school:query']">
  39. <el-input
  40. v-model="queryParams.longitude"
  41. placeholder="请输入经度"
  42. clearable
  43. @keyup.enter="handleQuery"
  44. class="!w-240px"
  45. />
  46. </el-form-item>
  47. <el-form-item label="维度" prop="latitude" v-hasPermi="['menduner:system:school:query']">
  48. <el-input
  49. v-model="queryParams.latitude"
  50. placeholder="请输入维度"
  51. clearable
  52. @keyup.enter="handleQuery"
  53. class="!w-240px"
  54. />
  55. </el-form-item>
  56. <el-form-item label="帐号状态" prop="status" v-hasPermi="['menduner:system:school:query']">
  57. <el-select
  58. v-model="queryParams.status"
  59. placeholder="请选择帐号状态"
  60. clearable
  61. class="!w-240px"
  62. >
  63. <el-option label="请选择字典生成" value="" />
  64. </el-select>
  65. </el-form-item>
  66. <el-form-item label="创建时间" prop="createTime" v-hasPermi="['menduner:system:school:query']">
  67. <el-date-picker
  68. v-model="queryParams.createTime"
  69. value-format="YYYY-MM-DD HH:mm:ss"
  70. type="daterange"
  71. start-placeholder="开始日期"
  72. end-placeholder="结束日期"
  73. :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
  74. class="!w-240px"
  75. />
  76. </el-form-item>
  77. <div class="text-center mb-12px">
  78. <el-button v-hasPermi="['menduner:system:school:query']" @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
  79. <el-button v-hasPermi="['menduner:system:school:query']" @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
  80. </div>
  81. </el-form>
  82. </ContentWrap>
  83. <!-- 列表 -->
  84. <ContentWrap>
  85. <div class="text-right">
  86. <el-button
  87. type="primary"
  88. plain
  89. @click="openForm('create')"
  90. v-hasPermi="['menduner:system:school:create']"
  91. >
  92. <Icon icon="ep:plus" class="mr-5px" /> 新增
  93. </el-button>
  94. <el-button
  95. type="success"
  96. plain
  97. @click="handleExport"
  98. :loading="exportLoading"
  99. v-hasPermi="['menduner:system:school:export']"
  100. >
  101. <Icon icon="ep:download" class="mr-5px" /> 导出
  102. </el-button>
  103. </div>
  104. <el-table v-loading="loading" :data="list" :stripe="true">
  105. <el-table-column label="id" align="center" prop="id" />
  106. <el-table-column label="名称" align="center" prop="name" />
  107. <el-table-column label="所在区域" align="center" prop="areaId" />
  108. <el-table-column label="学校地址" align="center" prop="address" :show-overflow-tooltip="true"/>
  109. <el-table-column label="经度" align="center" prop="longitude" />
  110. <el-table-column label="维度" align="center" prop="latitude" />
  111. <el-table-column label="帐号状态" align="center" prop="status" />
  112. <el-table-column
  113. label="创建时间"
  114. align="center"
  115. prop="createTime"
  116. :formatter="dateFormatter"
  117. :show-overflow-tooltip="true"
  118. width="180px"
  119. />
  120. <el-table-column label="操作" align="center">
  121. <template #default="scope">
  122. <el-button
  123. link
  124. type="primary"
  125. @click="openForm('update', scope.row.id)"
  126. v-hasPermi="['menduner:system:school:update']"
  127. >
  128. 编辑
  129. </el-button>
  130. <el-button
  131. link
  132. type="danger"
  133. @click="handleDelete(scope.row.id)"
  134. v-hasPermi="['menduner:system:school:delete']"
  135. >
  136. 删除
  137. </el-button>
  138. </template>
  139. </el-table-column>
  140. </el-table>
  141. <!-- 分页 -->
  142. <Pagination
  143. :total="total"
  144. v-model:page="queryParams.pageNo"
  145. v-model:limit="queryParams.pageSize"
  146. @pagination="getList"
  147. />
  148. </ContentWrap>
  149. <!-- 表单弹窗:添加/修改 -->
  150. <SchoolForm ref="formRef" @success="getList" />
  151. </template>
  152. <script setup lang="ts">
  153. import { dateFormatter } from '@/utils/formatTime'
  154. import download from '@/utils/download'
  155. import { SchoolApi, SchoolVO } from '@/api/menduner/system/school'
  156. import SchoolForm from './SchoolForm.vue'
  157. /** 学校 列表 */
  158. defineOptions({ name: 'School' })
  159. const message = useMessage() // 消息弹窗
  160. const { t } = useI18n() // 国际化
  161. const loading = ref(true) // 列表的加载中
  162. const list = ref<SchoolVO[]>([]) // 列表的数据
  163. const total = ref(0) // 列表的总页数
  164. const queryParams = reactive({
  165. pageNo: 1,
  166. pageSize: 10,
  167. name: undefined,
  168. areaId: undefined,
  169. address: undefined,
  170. longitude: undefined,
  171. latitude: undefined,
  172. status: undefined,
  173. createTime: ''
  174. })
  175. const queryFormRef = ref() // 搜索的表单
  176. const exportLoading = ref(false) // 导出的加载中
  177. /** 查询列表 */
  178. const getList = async () => {
  179. loading.value = true
  180. try {
  181. const data = await SchoolApi.getSchoolPage(queryParams)
  182. list.value = data.list
  183. total.value = data.total
  184. } finally {
  185. loading.value = false
  186. }
  187. }
  188. /** 搜索按钮操作 */
  189. const handleQuery = () => {
  190. queryParams.pageNo = 1
  191. getList()
  192. }
  193. /** 重置按钮操作 */
  194. const resetQuery = () => {
  195. queryFormRef.value.resetFields()
  196. handleQuery()
  197. }
  198. /** 添加/修改操作 */
  199. const formRef = ref()
  200. const openForm = (type: string, id?: number) => {
  201. formRef.value.open(type, id)
  202. }
  203. /** 删除按钮操作 */
  204. const handleDelete = async (id: number) => {
  205. try {
  206. // 删除的二次确认
  207. await message.delConfirm()
  208. // 发起删除
  209. await SchoolApi.deleteSchool(id)
  210. message.success(t('common.delSuccess'))
  211. // 刷新列表
  212. await getList()
  213. } catch {}
  214. }
  215. /** 导出按钮操作 */
  216. const handleExport = async () => {
  217. try {
  218. // 导出的二次确认
  219. await message.exportConfirm()
  220. // 发起导出
  221. exportLoading.value = true
  222. const data = await SchoolApi.exportSchool(queryParams)
  223. download.excel(data, '学校.xls')
  224. } catch {
  225. } finally {
  226. exportLoading.value = false
  227. }
  228. }
  229. /** 初始化 **/
  230. onMounted(() => {
  231. getList()
  232. })
  233. </script>