relics.vue 6.8 KB

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