jgkl.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. <template>
  2. <div class="p-5">
  3. <!-- 搜索表单 -->
  4. <el-form :model="searchForm" label-width="80px">
  5. <el-row :gutter="20">
  6. <el-col :span="6">
  7. <el-form-item label="井盖编号">
  8. <el-input v-model="searchForm.id" placeholder="请输入井盖编号"></el-input>
  9. </el-form-item>
  10. </el-col>
  11. <el-col :span="6">
  12. <el-form-item label="井盖名称">
  13. <el-input v-model="searchForm.name" placeholder="请输入井盖名称"></el-input>
  14. </el-form-item>
  15. </el-col>
  16. <el-col :span="12">
  17. <el-form-item>
  18. <el-button type="primary" @click="search">搜索</el-button>
  19. <el-button type="success" @click="addmanholeVisible = true"
  20. >添加井盖</el-button
  21. >
  22. </el-form-item>
  23. </el-col>
  24. </el-row>
  25. </el-form>
  26. <!-- 表格 -->
  27. <el-table :data="filteredTableData" border>
  28. <!-- 设备名称列 -->
  29. <el-table-column prop="deviceName" label="设备名称">
  30. <template #default="{ row }">
  31. <el-input
  32. v-if="row.isEditing"
  33. v-model="tableData.deviceName"
  34. placeholder="请输入设备名称"
  35. size="small"
  36. />
  37. <span v-else>{{ row.deviceName }}</span>
  38. </template>
  39. </el-table-column>
  40. <!-- <el-table-column prop="deviceName" label="设备名称"></el-table-column> -->
  41. <el-table-column prop="deviceNumber" label="设备编号"></el-table-column>
  42. <el-table-column prop="type" label="设备类型"></el-table-column>
  43. <el-table-column prop="model" label="设备型号"></el-table-column>
  44. <el-table-column prop="location" label="位置"></el-table-column>
  45. <el-table-column prop="alarmStatus" label=" 报警状态"></el-table-column>
  46. <el-table-column prop="onlineStatus" label="在线状态"></el-table-column>
  47. <el-table-column prop="createTime" label="创建时间" width="200"></el-table-column>
  48. <el-table-column prop="updateTime" label="修改时间" width="200"></el-table-column>
  49. <el-table-column prop="remarks" label=" 备注"></el-table-column>
  50. <!-- 状态列 -->
  51. <!-- <el-table-column prop="onlineStatus" label="状态">
  52. <template slot-scope="{ row }">
  53. <div :class="['status-cell', row.status + '-status']">
  54. {{ row.onlineStatus === "0" ? "在线" : "离线" }}
  55. </div>
  56. </template>
  57. </el-table-column> -->
  58. <!-- <el-table-column label="操作">
  59. <template #default="{ row, $index }">
  60. <el-button size="small" type="primary" :icon="Edit" circle @click="alterManholePost(row, $index)" />
  61. <el-button size="small" type="danger" :icon="Delete" circle />
  62. <el-button size="small" :icon="Search" circle @click="showDetail(scope.row)" />
  63. </template>
  64. </el-table-column> -->
  65. <el-table-column label="操作" width="200">
  66. <template #default="{ row, $index }">
  67. <div class="action-buttons">
  68. <template v-if="row.isEditing">
  69. <el-button type="success" size="small" @click="handleSave(row, $index)">
  70. 保存
  71. </el-button>
  72. <el-button type="info" size="small" @click="handleCancel(row)">
  73. 取消
  74. </el-button>
  75. </template>
  76. <template v-else>
  77. <el-button
  78. size="small"
  79. type="primary"
  80. :icon="Edit"
  81. circle
  82. @click="alterManholePost(row, $index)"
  83. />
  84. <el-button size="small" type="danger" :icon="Delete" circle />
  85. <el-button
  86. size="small"
  87. :icon="Search"
  88. circle
  89. @click="showDetail(scope.row)"
  90. />
  91. </template>
  92. </div>
  93. </template>
  94. </el-table-column>
  95. </el-table>
  96. <!-- 查看详情弹窗 -->
  97. <el-dialog title="井盖详情" v-model="dialogVisible">
  98. <el-descriptions :column="1">
  99. <el-descriptions-item label="设备名称">{{
  100. selectedCover.deviceName
  101. }}</el-descriptions-item>
  102. <el-descriptions-item label="设备编号">{{
  103. selectedCover.deviceNumber
  104. }}</el-descriptions-item>
  105. <el-descriptions-item label="设备类型">{{
  106. selectedCover.type
  107. }}</el-descriptions-item>
  108. <el-descriptions-item label="设备型号">{{
  109. selectedCover.model
  110. }}</el-descriptions-item>
  111. <el-descriptions-item label="位置">{{
  112. selectedCover.location
  113. }}</el-descriptions-item>
  114. <el-descriptions-item label="报警状态">{{
  115. selectedCover.alarmStatus
  116. }}</el-descriptions-item>
  117. <el-descriptions-item label="在线状态">{{
  118. selectedCover.onlineStatus
  119. }}</el-descriptions-item>
  120. <el-descriptions-item label="创建时间">{{
  121. selectedCover.createTime
  122. }}</el-descriptions-item>
  123. <el-descriptions-item label=" 修改时间">{{
  124. selectedCover.updateTime
  125. }}</el-descriptions-item>
  126. <el-descriptions-item label="备注">{{
  127. selectedCover.remarks
  128. }}</el-descriptions-item>
  129. </el-descriptions>
  130. </el-dialog>
  131. <!-- 修改井盖弹窗 -->
  132. <el-dialog title="井盖详情" v-model="alterVisible">
  133. <el-descriptions :column="1">
  134. <el-descriptions-item label="设备名称">{{
  135. selectedCover.deviceName
  136. }}</el-descriptions-item>
  137. <el-descriptions-item label="设备编号">{{
  138. selectedCover.deviceNumber
  139. }}</el-descriptions-item>
  140. <el-descriptions-item label="设备类型">{{
  141. selectedCover.type
  142. }}</el-descriptions-item>
  143. <el-descriptions-item label="设备型号">{{
  144. selectedCover.model
  145. }}</el-descriptions-item>
  146. <el-descriptions-item label="位置">{{
  147. selectedCover.location
  148. }}</el-descriptions-item>
  149. <el-descriptions-item label="报警状态">{{
  150. selectedCover.alarmStatus
  151. }}</el-descriptions-item>
  152. <el-descriptions-item label="在线状态">{{
  153. selectedCover.onlineStatus
  154. }}</el-descriptions-item>
  155. <el-descriptions-item label="创建时间">{{
  156. selectedCover.createTime
  157. }}</el-descriptions-item>
  158. <el-descriptions-item label=" 修改时间">{{
  159. selectedCover.updateTime
  160. }}</el-descriptions-item>
  161. <el-descriptions-item label="备注">{{
  162. selectedCover.remarks
  163. }}</el-descriptions-item>
  164. </el-descriptions>
  165. </el-dialog>
  166. <!-- 添加井盖弹窗 -->
  167. <el-dialog title="添加井盖" v-model="addmanholeVisible" width="50%">
  168. <el-form :model="addForm" ref="AddSaveRef" label-width="80px">
  169. <el-form-item label="设备名称">
  170. <el-input
  171. v-model="addForm.deviceName"
  172. placeholder="请输入井盖设备名称"
  173. ></el-input>
  174. </el-form-item>
  175. <el-form-item label="设备编号">
  176. <el-input
  177. v-model="addForm.deviceNumber"
  178. placeholder="请输入井盖设备编号"
  179. ></el-input>
  180. </el-form-item>
  181. <el-form-item label="位置">
  182. <el-input v-model="addForm.location" placeholder="请输入井盖位置"></el-input>
  183. </el-form-item>
  184. <el-form-item label="设备型号">
  185. <el-input v-model="addForm.model" placeholder="请输入井盖设备型号"></el-input>
  186. </el-form-item>
  187. <el-form-item label="备注">
  188. <el-input v-model="addForm.remarks" placeholder="请输入井盖备注"></el-input>
  189. </el-form-item>
  190. <el-form-item label="设备类型">
  191. <el-input v-model="addForm.type" placeholder="请输入井盖设备类型"></el-input>
  192. </el-form-item>
  193. </el-form>
  194. <template #footer>
  195. <span class="dialog-footer">
  196. <el-button @click="resetAddForm">取消</el-button>
  197. <el-button type="primary" @click="handleAddSubmit">确定</el-button>
  198. </span>
  199. </template>
  200. </el-dialog>
  201. </div>
  202. </template>
  203. <script setup>
  204. import { getManholeDataAll, addSave, alterManhole } from "@/api/ldzh/index";
  205. import { computed, ref } from "vue";
  206. import { Delete, Edit, Search } from "@element-plus/icons-vue";
  207. // 表格数据
  208. const tableData = ref();
  209. const { proxy } = getCurrentInstance();
  210. // 搜索条件
  211. const searchForm = ref({
  212. id: "",
  213. name: "",
  214. district: "",
  215. street: "",
  216. road: "",
  217. location: "",
  218. });
  219. // 控制新增井盖表单的显示与隐藏
  220. const addmanholeVisible = ref(false);
  221. // 是否显示详情弹窗
  222. const dialogVisible = ref(false);
  223. // 是否显示修改弹窗
  224. const alterVisible = ref(false);
  225. // 当前选中的井盖信息
  226. const selectedCover = ref({});
  227. // 根据搜索条件过滤数据
  228. const filteredTableData = computed(() => {
  229. if (!Object.values(searchForm.value).some((value) => value)) {
  230. return tableData.value;
  231. }
  232. return tableData.value.filter((row) => {
  233. const matches = [
  234. searchForm.value.id && row.id.includes(searchForm.value.id),
  235. searchForm.value.name && row.name.includes(searchForm.value.name),
  236. searchForm.value.district && row.district.includes(searchForm.value.district),
  237. searchForm.value.street && row.street.includes(searchForm.value.street),
  238. searchForm.value.road && row.road.includes(searchForm.value.road),
  239. searchForm.value.location && row.location.includes(searchForm.value.location),
  240. ];
  241. return matches.some((match) => match);
  242. });
  243. });
  244. // 搜索逻辑
  245. function search() {}
  246. // 显示详情
  247. function showDetail(row) {
  248. selectedCover.value = row;
  249. dialogVisible.value = true;
  250. }
  251. // 新增井盖表单数据
  252. const addForm = ref({
  253. deviceName: "",
  254. deviceNumber: "",
  255. location: "",
  256. model: "",
  257. remarks: "",
  258. type: "",
  259. });
  260. // 处理新增井盖表单提交
  261. function handleAddSubmit() {
  262. addSave(addForm.value).then((response) => {
  263. proxy.$modal.msgSuccess("新增成功");
  264. addmanholeVisible.value = false;
  265. getManholeAllData();
  266. });
  267. }
  268. // 修改井盖表单数据
  269. const editForm = ref({
  270. deviceName: "",
  271. type: "",
  272. location: "",
  273. model: "",
  274. remarks: "",
  275. });
  276. // 原始数据备份
  277. const originalData = ref({});
  278. // 进入编辑模式
  279. const alterManholePost = (row) => {
  280. // 关闭其他行的编辑状态
  281. tableData.value.forEach((item) => (item.isEditing = false));
  282. // 备份原始数据
  283. originalData.value = { ...row };
  284. // 开启当前行编辑
  285. row.isEditing = true;
  286. console.log(123, editForm);
  287. Object.assign(editForm, row);
  288. };
  289. // 保存修改
  290. const handleSave = (row, index) => {
  291. if (!validateForm()) return;
  292. Object.assign(row, editForm);
  293. row.isEditing = false;
  294. proxy.$modal.msgSuccess("保存成功");
  295. };
  296. // 取消修改
  297. const handleCancel = (row) => {
  298. Object.assign(row, originalData.value);
  299. row.isEditing = false;
  300. proxy.$modal.msgSuccess("修改已取消");
  301. };
  302. // // 处理修改井盖表单提交
  303. // function alterManholePost(res) {
  304. // console.log(112, res);
  305. // selectedCover.value = res;
  306. // alterVisible.value = true;
  307. // // alterManhole(addForm.value).then((response) => {
  308. // // proxy.$modal.msgSuccess("修改成功");
  309. // // addmanholeVisible.value = false;
  310. // // getManholeAllData();
  311. // // });
  312. // }
  313. // 表单验证
  314. const validateForm = () => {
  315. if (!editForm.deviceName?.trim()) {
  316. proxy.$modal.msgError("设备名称不能为空");
  317. return false;
  318. }
  319. return true;
  320. };
  321. // 清空新增井盖表单
  322. function resetAddForm() {
  323. addForm.value = {
  324. deviceName: "",
  325. deviceNumber: "",
  326. model: "",
  327. model: "",
  328. remarks: "",
  329. type: "",
  330. };
  331. addmanholeVisible.value = false;
  332. }
  333. //获取井盖全部信息
  334. function getManholeAllData() {
  335. getManholeDataAll().then((res) => {
  336. tableData.value = res.data;
  337. for (var i = 0; i < tableData.value.length; i++) {
  338. tableData.value[i].isEditing = false;
  339. }
  340. });
  341. }
  342. getManholeAllData();
  343. </script>
  344. <style scoped lang="scss"></style>