scene.vue 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  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.sceneName"
  10. style="width: 250px"
  11. placeholder="请输入"
  12. />
  13. </el-form-item>
  14. <el-form-item label="场景码:">
  15. <el-input
  16. clearable
  17. v-model="pageProps.sceneCode"
  18. style="width: 250px"
  19. placeholder="请输入"
  20. />
  21. </el-form-item>
  22. <template v-if="!simple">
  23. <el-form-item label="SN码:">
  24. <el-input
  25. clearable
  26. v-model="pageProps.snCode"
  27. style="width: 250px"
  28. placeholder="请输入"
  29. />
  30. </el-form-item>
  31. <el-form-item label="设备类型:">
  32. <el-select style="width: 250px" v-model="pageProps.cameraType" clearable>
  33. <el-option
  34. :value="Number(key)"
  35. :label="type"
  36. v-for="(type, key) in DeviceTypeDesc"
  37. />
  38. </el-select>
  39. </el-form-item>
  40. <el-form-item label="拍摄时间:">
  41. <el-date-picker
  42. clearable
  43. type="daterange"
  44. v-model="pageProps.shootTime"
  45. start-placeholder="请选择"
  46. end-placeholder="请选择"
  47. range-separator="-"
  48. placeholder="请选择"
  49. style="width: 250px"
  50. />
  51. </el-form-item>
  52. <el-form-item label="绑定账号:">
  53. <el-input
  54. clearable
  55. v-model="pageProps.userName"
  56. style="width: 250px"
  57. placeholder="请输入"
  58. />
  59. </el-form-item>
  60. <el-form-item v-if="!simple">
  61. <el-button type="primary" @click="refresh">查询</el-button>
  62. <el-button type="primary" plain @click="pageProps = { ...initProps }">
  63. 重置
  64. </el-button>
  65. </el-form-item>
  66. </template>
  67. </el-form>
  68. </div>
  69. </div>
  70. <div class="relics-content">
  71. <el-table
  72. :data="sceneArray"
  73. border
  74. @selection-change="(val) => tableProps && tableProps.selectionChange(val)"
  75. :ref="(table) => tableProps && (tableProps.tableRef.value = table)"
  76. >
  77. <slot name="table"></slot>
  78. <el-table-column label="场景标题" v-slot:default="{ row }">
  79. <a class="link" @click="gotoScene(row, false)">
  80. <TexToolTip :text="row.sceneName" />
  81. </a>
  82. </el-table-column>
  83. <el-table-column label="场景类型" v-slot:default="{ row }">
  84. <TexToolTip :text="SceneTypeDesc[row.cameraType as SceneType]" />
  85. </el-table-column>
  86. <el-table-column label="场景码" v-slot:default="{ row }">
  87. <TexToolTip :text="row.sceneCode" />
  88. </el-table-column>
  89. <el-table-column label="SN码" v-slot:default="{ row }">
  90. <TexToolTip :text="row.snCode" />
  91. </el-table-column>
  92. <el-table-column label="设备类型" prop="snCode" v-slot:default="{ row }">
  93. <TexToolTip :text="DeviceTypeDesc[row.cameraType as DeviceType]" />
  94. </el-table-column>
  95. <el-table-column label="拍摄时间" prop="algorithmTime" v-slot:default="{ row }">
  96. <TexToolTip :text="row.shootTime && row.shootTime.substr(0, 16)" />
  97. </el-table-column>
  98. <el-table-column label="计算完成时间" prop="createTime" v-slot:default="{ row }">
  99. <TexToolTip :text="row.algorithmTime && row.algorithmTime.substr(0, 16)" />
  100. </el-table-column>
  101. <el-table-column label="点位数量" v-slot:default="{ row }">
  102. <TexToolTip :text="row.shootCount" />
  103. </el-table-column>
  104. <el-table-column label="拍摄位置" v-slot:default="{ row }">
  105. <TexToolTip :text="row.gpsInfo" />
  106. </el-table-column>
  107. <!-- <el-table-column label="绑定账号" prop="userName"></el-table-column> -->
  108. <el-table-column label="状态" v-slot:default="{ row }">
  109. <TexToolTip :text="SceneStatusDesc[(row.calcStatus as SceneStatus)]" />
  110. </el-table-column>
  111. <el-table-column label="操作" width="150" fixed="right" v-if="!simple">
  112. <template #default="{ row }">
  113. <el-button link type="primary" size="small" @click="gotoScene(row, false)">
  114. 查看
  115. </el-button>
  116. <el-button link type="primary" size="small" @click="gotoScene(row, true)">
  117. 编辑
  118. </el-button>
  119. <el-button link type="danger" @click="delHandler(row.sceneId)" size="small">
  120. 删除
  121. </el-button>
  122. </template>
  123. </el-table-column>
  124. </el-table>
  125. </div>
  126. <div class="pag-layout">
  127. <el-pagination
  128. background
  129. layout="total, prev, pager, next, sizes, jumper"
  130. v-model:page-size="pageProps.pageSize"
  131. :page-sizes="[10, 20, 50, 100]"
  132. :total="total"
  133. @current-change="(data: number) => pageProps.pageNum = data"
  134. :current-page="pageProps.pageNum"
  135. />
  136. </div>
  137. </div>
  138. </template>
  139. <script lang="ts" setup>
  140. import { onActivated, ref, watchEffect } from "vue";
  141. import { scenePageFetch, ScenePageProps, delSceneFetch } from "@/request";
  142. import {
  143. SceneStatusDesc,
  144. SceneStatus,
  145. SceneType,
  146. SceneTypeDesc,
  147. Scene,
  148. } from "@/store/scene";
  149. import { DeviceTypeDesc, DeviceType } from "@/store/device";
  150. import { ElMessageBox } from "element-plus";
  151. import { gotoScene } from "@/store/scene";
  152. import TexToolTip from "@/components/tex-tooltip.vue";
  153. const props = defineProps<{ tableProps?: { [key in string]: any }; simple?: boolean }>();
  154. const initProps: ScenePageProps = {
  155. pageNum: 1,
  156. pageSize: 10,
  157. };
  158. const pageProps = ref({ ...initProps });
  159. const total = ref<number>(0);
  160. const sceneArray = ref<Scene[]>([]);
  161. const refresh = async () => {
  162. const data = await scenePageFetch(pageProps.value);
  163. total.value = data.total;
  164. sceneArray.value = data.records;
  165. if (props.tableProps) {
  166. props.tableProps.tableDataChange(sceneArray.value);
  167. }
  168. };
  169. const delHandler = async (relicsId: number) => {
  170. const ok = await ElMessageBox.confirm("确定要删除吗", {
  171. type: "warning",
  172. });
  173. if (ok) {
  174. await delSceneFetch(relicsId);
  175. await refresh();
  176. }
  177. };
  178. watchEffect(refresh);
  179. onActivated(refresh);
  180. </script>
  181. <style scoped lang="scss">
  182. .relics-layout {
  183. height: 100%;
  184. overflow-y: auto;
  185. padding: 30px;
  186. }
  187. .pag-layout {
  188. margin-top: 20px;
  189. display: flex;
  190. justify-content: center;
  191. }
  192. .relics-header {
  193. display: flex;
  194. align-items: center;
  195. margin-bottom: 20px;
  196. .search {
  197. flex: 1;
  198. }
  199. .relics-oper {
  200. flex: 0 0 100px;
  201. text-align: right;
  202. }
  203. }
  204. </style>