relics.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <template>
  2. <div class="relics-layout">
  3. <div class="relics-header">
  4. <div class="search">
  5. <el-form label-width="100px" inline>
  6. <el-form-item label="文物名称:">
  7. <el-input
  8. v-model="pageProps.name"
  9. style="width: 250px"
  10. placeholder="请输入"
  11. />
  12. </el-form-item>
  13. <el-form-item label="文物级别:">
  14. <el-select style="width: 250px" v-model="pageProps.level">
  15. <el-option
  16. :value="Number(key)"
  17. :label="type"
  18. v-for="(type, key) in relicsLevelDesc"
  19. />
  20. </el-select>
  21. </el-form-item>
  22. <el-form-item label="类别:">
  23. <el-select style="width: 250px" v-model="pageProps.category">
  24. <el-option
  25. :value="Number(key)"
  26. :label="type"
  27. v-for="(type, key) in relicsTypeDesc"
  28. />
  29. </el-select>
  30. </el-form-item>
  31. <el-form-item class="searh-btns">
  32. <el-button type="primary" @click="refresh">查询</el-button>
  33. <el-button type="primary" plain @click="pageProps = { ...initProps }">
  34. 重置
  35. </el-button>
  36. <el-button type="primary" @click="addHandler">创建文物</el-button>
  37. </el-form-item>
  38. </el-form>
  39. </div>
  40. <!-- <div class="relics-oper">
  41. <el-button type="primary" @click="inputMode = true">新增</el-button>
  42. </div> -->
  43. </div>
  44. <el-table :data="relicsArray" border>
  45. <el-table-column prop="name" label="文物保护单位名称" />
  46. <el-table-column prop="unicode" label="文物编号" />
  47. <el-table-column
  48. prop="name"
  49. label="文物级别"
  50. v-slot:default="{ row }: { row: Relics }"
  51. >
  52. {{ relicsLevelDesc[row.level!] }}
  53. </el-table-column>
  54. <el-table-column prop="name" label="类别" v-slot:default="{ row }: { row: Relics }">
  55. {{ relicsTypeDesc[row.category!] }}
  56. </el-table-column>
  57. <el-table-column prop="address" label="文物地址" />
  58. <el-table-column label="创建时间" prop="createTime" v-slot:default="{ row }">
  59. {{ row.createTime && row.createTime.substr(0, 16) }}
  60. </el-table-column>
  61. <el-table-column prop="userName" label="创建人" />
  62. <el-table-column
  63. prop="creationMethod"
  64. label="创建方式"
  65. v-slot:default="{ row }: { row: Relics }"
  66. >
  67. {{ creationMethodDesc[row.creationMethod!] }}
  68. {{}}
  69. </el-table-column>
  70. <el-table-column label="操作" width="240" fixed="right">
  71. <template #default="{ row }">
  72. <el-button link type="primary" size="small" @click="shareHandler(row)">
  73. 文物链接
  74. </el-button>
  75. <el-button link type="primary" size="small" @click="editHandler(row)">
  76. 编辑
  77. </el-button>
  78. <el-button
  79. link
  80. type="primary"
  81. size="small"
  82. @click="router.push({ name: 'map', params: { relicsId: row.relicsId } })"
  83. >
  84. 数据提取
  85. </el-button>
  86. <el-button link type="danger" @click="delHandler(row.relicsId)" size="small">
  87. 删除
  88. </el-button>
  89. </template>
  90. </el-table-column>
  91. </el-table>
  92. <div class="pag-layout">
  93. <el-pagination
  94. background
  95. layout="prev, pager, next, sizes, jumper"
  96. v-model:page-size="pageProps.pageSize"
  97. :page-sizes="[10, 20, 50, 100]"
  98. :total="total"
  99. @current-change="(data: number) => pageProps.pageNum = data"
  100. :current-page="pageProps.pageNum"
  101. :page-size="pageProps.pageSize"
  102. />
  103. </div>
  104. </div>
  105. </template>
  106. <script lang="ts" setup>
  107. import { onActivated, ref, watchEffect } from "vue";
  108. import {
  109. relicsPageFetch,
  110. RelicsPageProps,
  111. addRelicsFetch,
  112. delRelicsFetch,
  113. updateRelicsFetch,
  114. } from "@/request";
  115. import {
  116. Relics,
  117. relicsLevelDesc,
  118. relicsTypeDesc,
  119. creationMethodDesc,
  120. } from "@/store/relics";
  121. import { router } from "@/router";
  122. import { ElMessage, ElMessageBox } from "element-plus";
  123. import { copyText } from "@/util";
  124. import { relicsEdit } from "./quisk";
  125. const initProps: RelicsPageProps = {
  126. pageNum: 1,
  127. pageSize: 10,
  128. };
  129. const pageProps = ref({ ...initProps });
  130. const total = ref<number>(0);
  131. const relicsArray = ref<Relics[]>([]);
  132. const refresh = async () => {
  133. const data = await relicsPageFetch(pageProps.value);
  134. total.value = data.total;
  135. relicsArray.value = data.records;
  136. };
  137. const delHandler = async (relicsId: number) => {
  138. const ok = await ElMessageBox.confirm("确定要删除吗", {
  139. type: "warning",
  140. });
  141. if (ok) {
  142. await delRelicsFetch(relicsId);
  143. await refresh();
  144. }
  145. };
  146. const getQueryRouteLocation = (row: Relics) =>
  147. router.resolve({ name: "query-map", params: { relicsId: row.relicsId } });
  148. const shareHandler = async (row: Relics) => {
  149. const link = location.origin + location.pathname + getQueryRouteLocation(row).href;
  150. window.open(link);
  151. // await copyText(link);
  152. // await ElMessage.success("链接复制成功");
  153. };
  154. const addHandler = async () => {
  155. const a = await relicsEdit({
  156. submit: async (data) => {
  157. await addRelicsFetch(data);
  158. await refresh();
  159. },
  160. });
  161. console.log(a);
  162. };
  163. const editHandler = async (relics: Relics) => {
  164. await relicsEdit({
  165. relics,
  166. submit: async (data) => {
  167. await updateRelicsFetch(data);
  168. await refresh();
  169. },
  170. });
  171. };
  172. watchEffect(refresh);
  173. onActivated(refresh);
  174. </script>
  175. <style scoped lang="scss">
  176. .relics-layout {
  177. height: 100%;
  178. overflow-y: auto;
  179. padding: 30px;
  180. }
  181. .pag-layout {
  182. margin-top: 20px;
  183. display: flex;
  184. justify-content: center;
  185. }
  186. .relics-header {
  187. display: flex;
  188. align-items: center;
  189. margin-bottom: 20px;
  190. .search {
  191. flex: 1;
  192. }
  193. .relics-oper {
  194. flex: 0 0 100px;
  195. text-align: right;
  196. }
  197. }
  198. </style>