alarmConfig-list.vue 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. <template>
  2. <div>
  3. <el-breadcrumb separator=">">
  4. <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
  5. <el-breadcrumb-item>
  6. <a href="#">系统管理</a>
  7. </el-breadcrumb-item>
  8. <el-breadcrumb-item>
  9. <a href="/messageNotice">考勤时间</a>
  10. </el-breadcrumb-item>
  11. </el-breadcrumb>
  12. <el-divider></el-divider>
  13. <!--
  14. 要resetFields起作用,必须配置:model和prop
  15. -->
  16. <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
  17. <el-form-item label="单位" prop="companyId">
  18. <!-- <el-select
  19. v-model="queryModel.companyId"
  20. size="mini"
  21. filterable
  22. placeholder="请选择"
  23. style="width:280px"
  24. >
  25. <el-option
  26. v-for="company in companyResult"
  27. :key="company.id"
  28. :label="company.name"
  29. :value="company.id"
  30. ></el-option>
  31. </el-select>-->
  32. <el-select-tree
  33. :props="props"
  34. aria-setsize="mini"
  35. :options="companyResult"
  36. v-model="queryModel.companyId"
  37. height="200"
  38. ></el-select-tree>
  39. </el-form-item>
  40. <el-form-item>
  41. <el-button
  42. type="primary"
  43. size="mini"
  44. icon="ios-search"
  45. @click="changePage(1)"
  46. :loading="loading"
  47. >查询</el-button>&nbsp;
  48. </el-form-item>
  49. </el-form>
  50. <el-divider></el-divider>
  51. <el-row class="button-group">
  52. <el-button type="primary" size="small" plain icon="el-icon-circle-plus" @click="handleAdd">新增</el-button>
  53. <el-button
  54. type="primary"
  55. size="small"
  56. plain
  57. icon="el-icon-remove"
  58. :disabled="multipleSelection.length==0"
  59. @click="handleBatchDelete"
  60. >删除选中项</el-button>
  61. </el-row>
  62. <el-table
  63. ref="formTable"
  64. :data="tableData"
  65. v-loading="loading"
  66. :height="tableHeight"
  67. stripe
  68. @sort-change="sortChange"
  69. @selection-change="handleSelectionChange"
  70. >
  71. <el-table-column type="selection" width="55"></el-table-column>
  72. <el-table-column prop="companyName" label="单位" width="220" fixed="left"></el-table-column>
  73. <el-table-column prop="subordinate" label="是否包含下级单位" width="150">
  74. <template slot-scope="{row}">
  75. <span v-html="row.subordinate ? '是': '否'"></span>
  76. </template>
  77. </el-table-column>
  78. <el-table-column prop="weekdays" label="周工作日" show-overflow-tooltip width="150"></el-table-column>
  79. <el-table-column prop="startTime" label="开始时间" width="120"></el-table-column>
  80. <el-table-column prop="attendanceTime" label="考勤时间" width="120"></el-table-column>
  81. <el-table-column prop="endTime" label="结束时间" width="120"></el-table-column>
  82. <el-table-column prop="classifier" label="考勤分类" width="120">
  83. <template slot-scope="{row}">
  84. <span v-html="row.classifier==1 ? '上班时间': ''"></span>
  85. <span v-html="row.classifier==2 ? '下班时间': ''"></span>
  86. </template>
  87. </el-table-column>
  88. <el-table-column prop="needMeasureTemperature" label="是否要求测温" width="120">
  89. <template slot-scope="{row}">
  90. <span v-html="row.needMeasureTemperature ? '是': '否'"></span>
  91. </template>
  92. </el-table-column>
  93. <el-table-column label="操作" width="200" fixed="right">
  94. <template slot-scope="{row}">
  95. <el-button size="mini" type="warning" @click="handleEdit(row)">修改</el-button>
  96. <el-button size="mini" type="danger" @click="handleDelete(row)">删除</el-button>
  97. </template>
  98. </el-table-column>
  99. </el-table>
  100. <el-pagination
  101. :current-page.sync="pageIndex"
  102. :total="totalElements"
  103. :page-sizes="pageSizeList"
  104. @current-change="changePage"
  105. @size-change="pageSizeChange"
  106. layout="total, sizes, prev, pager, next, jumper"
  107. ></el-pagination>
  108. <alarmConfig-detail
  109. v-if="showModal"
  110. :businessKey="businessKey"
  111. :title="modalTitle"
  112. :companyResult="companyResult"
  113. @close="onDetailModalClose"
  114. ></alarmConfig-detail>
  115. </div>
  116. </template>
  117. <script>
  118. import Constant from "@/constant";
  119. import alarmConfigDetail from "./alarmConfig-detail";
  120. import alarmConfigApi from "@/api/base/alarmConfig";
  121. import companyInfoApi from "@/api/base/companyInfo";
  122. import SelectTree from "@/components/SelectTree";
  123. import NProgress from "nprogress"; // progress bar
  124. import "nprogress/nprogress.css"; // progress bar style
  125. export default {
  126. name: "BaseAlarmConfigList",
  127. data() {
  128. var self = this;
  129. return {
  130. queryModel: {
  131. companyId: ""
  132. },
  133. loading: false,
  134. tableData: [],
  135. pageIndex: 1,
  136. pageSize: 10,
  137. totalPages: 0,
  138. totalElements: 0,
  139. field: "",
  140. direction: "",
  141. pageSizeList: [10, 20, 30],
  142. multipleSelection: [],
  143. showModal: false,
  144. modalTitle: "",
  145. businessKey: "",
  146. tableHeight: 400,
  147. companyResult: [],
  148. treeData: [],
  149. props: {
  150. // 配置项(必选)
  151. value: "id",
  152. label: "name",
  153. children: "children"
  154. }
  155. };
  156. },
  157. created() {
  158. this.loadTree();
  159. },
  160. methods: {
  161. getSelectedValue(value) {
  162. this.queryModel.companyId = value;
  163. },
  164. loadTree() {
  165. var formData = new FormData();
  166. companyInfoApi.loadChildren(formData).then(resp => {
  167. var jsonData = resp.data;
  168. if (jsonData.result) {
  169. this.treeData = jsonData.data;
  170. } else {
  171. this.$message.error(jsonData.message + "");
  172. }
  173. });
  174. },
  175. loadChildren(tree, treeNode, resolve) {
  176. console.log(tree);
  177. var formData = new FormData();
  178. formData.append("parentId", tree.id);
  179. companyInfoApi.loadChildren(formData).then(resp => {
  180. var jsonData = resp.data;
  181. if (jsonData.result) {
  182. resolve(jsonData.data);
  183. } else {
  184. this.$message.error(jsonData.message + "");
  185. }
  186. });
  187. },
  188. changePage(pageIndex) {
  189. var self = this;
  190. self.loading = true;
  191. self.pageIndex = pageIndex;
  192. var formData = new FormData();
  193. formData.append("pageIndex", self.pageIndex);
  194. formData.append("pageSize", self.pageSize);
  195. if (self.queryModel.companyId == null) {
  196. self.queryModel.companyId = "";
  197. }
  198. formData.append("companyId", self.queryModel.companyId);
  199. if (this.field != null) {
  200. formData.append("field", this.field);
  201. }
  202. if (this.direction != null) {
  203. formData.append("direction", this.direction);
  204. }
  205. alarmConfigApi
  206. .pageList(formData)
  207. .then(function(response) {
  208. self.loading = false;
  209. var jsonData = response.data.data;
  210. self.tableData = jsonData.data;
  211. self.totalPages = jsonData.totalPages;
  212. self.totalElements = jsonData.recordsTotal;
  213. //45为分页栏的高度
  214. //页面高度-列表上面的高度-分页栏高度
  215. self.tableHeight =
  216. window.innerHeight - self.$refs.formTable.$el.offsetTop - 45;
  217. })
  218. .catch(error => {
  219. self.loading = false;
  220. // self.$message.error(error + "");
  221. });
  222. },
  223. pageSizeChange(pageSize) {
  224. this.pageSize = pageSize;
  225. },
  226. sortChange(data) {
  227. this.field = data.column.field;
  228. this.direction = data.order;
  229. this.changePage(this.pageIndex);
  230. },
  231. handleSelectionChange(val) {
  232. this.multipleSelection = val;
  233. },
  234. handleReset(name) {
  235. this.$refs[name].resetFields();
  236. },
  237. handleAdd() {
  238. this.modalTitle = "新增";
  239. this.businessKey = "";
  240. this.showModal = true;
  241. },
  242. handleEdit(record) {
  243. this.modalTitle = "编辑";
  244. this.businessKey = record.id;
  245. this.showModal = true;
  246. },
  247. handleDelete(record) {
  248. var self = this;
  249. self
  250. .$confirm("是否确认删除?", "提示", {
  251. confirmButtonText: "确定",
  252. cancelButtonText: "取消",
  253. type: "warning"
  254. })
  255. .then(() => {
  256. alarmConfigApi.remove(record.id).then(function(response) {
  257. var jsonData = response.data;
  258. if (jsonData.result) {
  259. // var index = self.tableData.indexOf(record);
  260. // self.tableData.splice(index, 1);
  261. self.changePage(self.pageIndex);
  262. self.$message({
  263. type: "success",
  264. message: "删除成功!"
  265. });
  266. }
  267. });
  268. });
  269. },
  270. handleBatchDelete() {
  271. var self = this;
  272. var idList = this.multipleSelection.map(record => {
  273. return record.id;
  274. });
  275. this.$confirm("是否确认删除选中项?", "提示", {
  276. confirmButtonText: "确定",
  277. cancelButtonText: "取消",
  278. type: "warning"
  279. }).then(() => {
  280. alarmConfigApi.batchRemove(idList).then(function(response) {
  281. var jsonData = response.data;
  282. if (jsonData.result) {
  283. self.changePage(self.pageIndex);
  284. self.$message({
  285. type: "success",
  286. message: "删除成功!"
  287. });
  288. }
  289. });
  290. });
  291. },
  292. onDetailModalClose(refreshed) {
  293. //保存成功后回调
  294. this.showModal = false;
  295. if (refreshed) {
  296. this.changePage(this.pageIndex);
  297. }
  298. }
  299. },
  300. mounted: function() {
  301. var self = this;
  302. this.changePage(1);
  303. companyInfoApi.list().then(function(response) {
  304. var jsonData = response.data;
  305. if (jsonData.result) {
  306. self.companyResult = jsonData.data;
  307. }
  308. });
  309. },
  310. components: {
  311. "alarmConfig-detail": alarmConfigDetail,
  312. "el-select-tree": SelectTree
  313. }
  314. };
  315. </script>
  316. <style lang="scss" scoped>
  317. .el-breadcrumb {
  318. margin: 10px;
  319. line-height: 20px;
  320. }
  321. .el-divider {
  322. margin: 5px 0;
  323. }
  324. .demo-form-inline {
  325. margin-left: 10px;
  326. text-align: left;
  327. }
  328. .button-group {
  329. margin-left: 10px;
  330. text-align: left;
  331. }
  332. </style>