relics.vue 6.4 KB

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