index.vue 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. <template>
  2. <div class="table-box">
  3. <div class="card table-main">
  4. <!-- 表格头部 操作按钮 -->
  5. <div class="table-header">
  6. <div class="header-button-lf">
  7. <el-form-item label="站名:">
  8. <el-select v-model="queryParams.name" filterable placeholder="请选择" clearable style="width: 200px">
  9. <el-option label="自动站1" value="1" />
  10. </el-select>
  11. </el-form-item>
  12. <el-form :model="queryParams" label-width="auto" :inline="true">
  13. <el-form-item label="站号:">
  14. <el-select v-model="queryParams.code" filterable placeholder="请选择" clearable style="width: 200px">
  15. <el-option label="M1994" value="M1994" />
  16. <el-option label="M1995" value="M1995" />
  17. </el-select>
  18. </el-form-item>
  19. <el-form-item>
  20. <el-button type="primary" @click="handleQuery"> 查询 </el-button>
  21. <el-button style="margin-left: 10px" @click="resetQuery"> 重置 </el-button>
  22. <el-button style="margin-left: 10px" type="primary" plain @click="handleAdd"> 新增 </el-button>
  23. </el-form-item>
  24. </el-form>
  25. </div>
  26. </div>
  27. <!-- 表格主体 -->
  28. <el-table stripe ref="tableRef" :border="true" :data="processTableData" size="small">
  29. <el-table-column align="left" label="序号" width="80px" :show-overflow-tooltip="true">
  30. <template #default="scope">
  31. {{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}
  32. </template>
  33. </el-table-column>
  34. <template v-for="item in columns" :key="item">
  35. <el-table-column v-bind="item" :align="item.align ?? 'left'" :reserve-selection="item.type == 'selection'" :show-overflow-tooltip="true">
  36. <template #default="scope">
  37. <template v-if="item.prop === 'operation'">
  38. <el-tooltip
  39. class="box-item"
  40. effect="dark"
  41. content="编辑"
  42. placement="top"
  43. >
  44. <el-button type="primary" link @click="handleUpdate">
  45. <img class="operation-img" src="@/assets/images/edit.png">
  46. </el-button>
  47. </el-tooltip>
  48. <el-tooltip
  49. class="box-item"
  50. effect="dark"
  51. content="删除"
  52. placement="top"
  53. >
  54. <el-button type="primary" link @click="handleDelete(scope.row)">
  55. <img class="operation-img" src="@/assets/images/delete.png">
  56. </el-button>
  57. </el-tooltip>
  58. </template>
  59. </template>
  60. </el-table-column>
  61. </template>
  62. <!-- 无数据 -->
  63. <template #empty>
  64. <div class="table-empty">
  65. <slot name="empty">
  66. <img src="@/assets/images/notData.png" alt="notData" />
  67. <div>暂无数据</div>
  68. </slot>
  69. </div>
  70. </template>
  71. </el-table>
  72. <!-- 分页组件 -->
  73. <Pagination :pageable="pageable" :handle-size-change="handleSizeChange" :handle-current-change="handleCurrentChange" />
  74. </div>
  75. <!-- 添加或修改对话框 -->
  76. <el-dialog :title="dialog.title" v-model="dialog.visible" width="1600px" append-to-body :close-on-click-modal="false">
  77. <el-tabs tab-position="left" class="demo-tabs" style="height: 700px">
  78. <el-tab-pane label="基本参数">
  79. <ParametersBasic></ParametersBasic>
  80. </el-tab-pane>
  81. <el-tab-pane label="观测要素">
  82. 观测要素
  83. </el-tab-pane>
  84. <el-tab-pane label="仪器检定证">
  85. 仪器检定证
  86. </el-tab-pane>
  87. <el-tab-pane label="阈值设置">
  88. 阈值设置
  89. </el-tab-pane>
  90. <el-tab-pane label="保障策略设置">
  91. 保障策略设置
  92. </el-tab-pane>
  93. <el-tab-pane label="编报项目设置">
  94. 编报项目设置
  95. </el-tab-pane>
  96. </el-tabs>
  97. </el-dialog>
  98. </div>
  99. </template>
  100. <script setup lang="ts" name="useProTable">
  101. import Pagination from "@/components/ProTable/components/Pagination.vue";
  102. import ParametersBasic from "./components/parametersBasic.vue";
  103. import { ref, reactive } from "vue";
  104. import { ColumnProps } from "@/components/ProTable/interface";
  105. import { ElMessageBox } from 'element-plus'
  106. const pageable = ref<any>({
  107. pageNum: 1,
  108. pageSize: 20,
  109. total: 1
  110. });
  111. const queryParams = ref({
  112. code: '',
  113. name:'',
  114. pageNum: 1,
  115. pageSize: 20,
  116. total: 2
  117. });
  118. // 查询功能
  119. const handleQuery = () => {
  120. queryParams.value.pageNum = 1;
  121. };
  122. //搜索功能
  123. const resetQuery = () => {
  124. queryParams.value.pageNum = 1;
  125. };
  126. /**
  127. * @description 每页条数改变
  128. * @param {Number} val 当前条数
  129. * @return void
  130. * */
  131. const handleSizeChange = (val: number) => {
  132. console.log(val);
  133. };
  134. /**
  135. * @description 当前页改变
  136. * @param {Number} val 当前页
  137. * @return void
  138. * */
  139. const handleCurrentChange = (val: number) => {
  140. console.log(val);
  141. };
  142. const processTableData = ref([
  143. {
  144. id: "681913747276782417",
  145. a: "测试验证",
  146. b: "固定站2",
  147. c: "M1927",
  148. d: "1级",
  149. e: "公园",
  150. f: "110°0'0”E”",
  151. g: "33°0'0”N",
  152. h: "小王",
  153. i: "张三",
  154. j: "李四",
  155. k: "自动"
  156. }
  157. ]);
  158. // 表格配置项
  159. const columns = reactive<ColumnProps[]>([
  160. { prop: "a", label: "部别" },
  161. { prop: "b", label: "站名" },
  162. { prop: "c", label: "站号" },
  163. { prop: "d", label: "地图层级" },
  164. { prop: "e", label: "地址" },
  165. { prop: "f", label: "经度" },
  166. { prop: "g", label: "纬度" },
  167. { prop: "h", label: "预审员"},
  168. { prop: "i", label: "测试组长"},
  169. { prop: "j", label: "台长"},
  170. { prop: "k", label: "观测方式"},
  171. { prop: "operation", label: "操作", width:150,align: 'center' }
  172. ]);
  173. const dialog = reactive<any>({
  174. visible: false,
  175. title: ''
  176. });
  177. const formRef = ref<any>();
  178. const initFormData = ref<any>(
  179. {
  180. code: "",
  181. type: "",
  182. name: "",
  183. startTime:"",
  184. endTime:"",
  185. remark: ""
  186. }
  187. );
  188. const form = ref<any>({...initFormData});
  189. /** 新增按钮操作 */
  190. const handleAdd = () => {
  191. reset();
  192. dialog.visible = true;
  193. dialog.title = "新增站台";
  194. }
  195. /** 修改按钮操作 */
  196. const handleUpdate = async (row?: any) => {
  197. reset();
  198. dialog.visible = true;
  199. dialog.title = "编辑站台";
  200. }
  201. /** 取消按钮 */
  202. const cancel = () => {
  203. reset();
  204. dialog.visible = false;
  205. }
  206. /** 表单重置 */
  207. const reset = () => {
  208. form.value = { ...initFormData };
  209. formRef.value?.resetFields();
  210. }
  211. /** 提交按钮 */
  212. const submitForm = () => {
  213. formRef.value?.validate(async (valid: boolean) => {
  214. if (valid) {
  215. dialog.visible = false;
  216. }
  217. });
  218. }
  219. /** 删除按钮操作 */
  220. const handleDelete = async (row?: any) => {
  221. ElMessageBox.confirm('是否确认删除编号为"' + row.b + '"的数据项?', {
  222. confirmButtonText: '删除',
  223. cancelButtonText: '取消',
  224. type: 'warning',
  225. title:'删除数据',
  226. draggable: true
  227. })
  228. .then(() => {
  229. })
  230. .catch(() => {
  231. })
  232. }
  233. </script>