index.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
  4. <el-form-item label="巡更点名称" prop="name" label-width="100px">
  5. <el-input
  6. v-model="queryParams.name"
  7. placeholder="请输入巡更点名称"
  8. clearable
  9. @keyup.enter.native="handleQuery"
  10. />
  11. </el-form-item>
  12. <el-form-item>
  13. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  14. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  15. </el-form-item>
  16. </el-form>
  17. <el-row :gutter="10" class="mb8">
  18. <el-col :span="1.5">
  19. <el-button
  20. type="primary"
  21. plain
  22. icon="el-icon-plus"
  23. size="mini"
  24. @click="handleAdd"
  25. v-hasPermi="['patrolpoint:patrolpoint:add']"
  26. >新增
  27. </el-button>
  28. </el-col>
  29. <el-col :span="1.5">
  30. <el-button
  31. type="success"
  32. plain
  33. icon="el-icon-edit"
  34. size="mini"
  35. :disabled="single"
  36. @click="handleUpdate"
  37. v-hasPermi="['patrolpoint:patrolpoint:edit']"
  38. >修改
  39. </el-button>
  40. </el-col>
  41. <el-col :span="1.5">
  42. <el-button
  43. type="danger"
  44. plain
  45. icon="el-icon-delete"
  46. size="mini"
  47. :disabled="multiple"
  48. @click="handleDelete"
  49. v-hasPermi="['patrolpoint:patrolpoint:remove']"
  50. >删除
  51. </el-button>
  52. </el-col>
  53. <el-col :span="1.5">
  54. <el-button
  55. type="warning"
  56. plain
  57. icon="el-icon-download"
  58. size="mini"
  59. @click="handleExport"
  60. v-hasPermi="['patrolpoint:patrolpoint:export']"
  61. >导出
  62. </el-button>
  63. </el-col>
  64. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  65. </el-row>
  66. <el-table v-loading="loading" :data="patrolpointList" @selection-change="handleSelectionChange">
  67. <el-table-column type="selection" width="55" align="center"/>
  68. <!-- <el-table-column label="主键ID" align="center" prop="id" />
  69. <el-table-column label="删除人" align="center" prop="deleteBy" />
  70. <el-table-column label="删除时间" align="center" prop="deleteTime" width="180">
  71. <template slot-scope="scope">
  72. <span>{{ parseTime(scope.row.deleteTime, '{y}-{m}-{d}') }}</span>
  73. </template>
  74. </el-table-column>-->
  75. <!-- <el-table-column label="数据状态" align="center" prop="dataStatus" />-->
  76. <el-table-column label="巡更点名称" align="center" prop="name" width="107%"/>
  77. <el-table-column label="经度" align="center" prop="longitude"/>
  78. <el-table-column label="纬度" align="center" prop="latitude"/>
  79. <!-- <el-table-column label="隶属企业" align="center" prop="enterpriseId"/>-->
  80. <el-table-column label="地址" align="center" prop="patrolpointAddress"/>
  81. <el-table-column label="下次巡更时间" align="center" prop="patrolNexttime" width="180">
  82. <template slot-scope="scope">
  83. <span>{{ parseTime(scope.row.patrolNexttime, '{y}-{m}-{d}') }}</span>
  84. </template>
  85. </el-table-column>
  86. <el-table-column label="最后一次巡更时间" align="center" prop="patrolLasttime" width="180">
  87. <template slot-scope="scope">
  88. <span>{{ parseTime(scope.row.patrolLasttime, '{y}-{m}-{d}') }}</span>
  89. </template>
  90. </el-table-column>
  91. <el-table-column label="巡更周期(单位-天)" align="center" prop="patrolCycle" width="155%"/>
  92. <el-table-column label="预警阈值" align="center" prop="alertDay"/>
  93. <el-table-column label="负责人" align="center" prop="charger"/>
  94. <el-table-column label="负责人电话" align="center" prop="chargerPhone" width="107%"/>
  95. <!-- <el-table-column label="备注" align="center" prop="pointRemark" />-->
  96. <el-table-column label="绑定条码" align="center" prop="barCode"/>
  97. <!-- <el-table-column label="巡更点状态" align="center" prop="patrolpointStatus"/>-->
  98. <el-table-column label="创建人" align="center" prop="createName"/>
  99. <el-table-column label="创建时间" align="center" prop="createTime"/>
  100. <el-table-column label="修改人" align="center" prop="updateName"/>
  101. <el-table-column label="修改时间" align="center" prop="updateTime"/>
  102. <!-- <el-table-column label="${comment}" align="center" prop="enterpriseName" />
  103. <el-table-column label="${comment}" align="center" prop="owndeptid" />-->
  104. <!-- <el-table-column label="数据所属部门(政或党的id)" align="center" prop="dataDeptId" />-->
  105. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  106. <template slot-scope="scope">
  107. <el-button
  108. size="mini"
  109. type="text"
  110. icon="el-icon-edit"
  111. @click="handleUpdate(scope.row)"
  112. v-hasPermi="['patrolpoint:patrolpoint:edit']"
  113. >修改
  114. </el-button>
  115. <el-button
  116. size="mini"
  117. type="text"
  118. icon="el-icon-delete"
  119. @click="handleDelete(scope.row)"
  120. v-hasPermi="['patrolpoint:patrolpoint:remove']"
  121. >删除
  122. </el-button>
  123. </template>
  124. </el-table-column>
  125. </el-table>
  126. <pagination
  127. v-show="total>0"
  128. :total="total"
  129. :page.sync="queryParams.pageNum"
  130. :limit.sync="queryParams.pageSize"
  131. @pagination="getList"
  132. />
  133. <!-- 添加或修改巡更点对话框 -->
  134. <el-dialog :title="title" :visible.sync="open" width="1000px" class="form-style">
  135. <el-form ref="form" :model="form" :rules="rules" label-width="150px">
  136. <el-row :gutter="20">
  137. <el-col :span="12">
  138. <!--<el-form-item label="删除人" prop="deleteBy">
  139. <el-input v-model="form.deleteBy" placeholder="请输入删除人" maxlength="50"/>
  140. </el-form-item>
  141. <el-form-item label="删除时间" prop="deleteTime">
  142. <el-date-picker clearable
  143. v-model="form.deleteTime"
  144. type="date"
  145. value-format="yyyy-MM-dd"
  146. placeholder="请id
  147. </el-form-item>-->
  148. <el-form-item label="巡更点名称" prop="name">
  149. <el-input v-model="form.name" placeholder="请输入巡更点名称" maxlength="50"/>
  150. </el-form-item>
  151. <el-form-item label="巡更周期(单位-天)" prop="patrolCycle">
  152. <el-input v-model="form.patrolCycle" placeholder="请输入巡更周期(单位-天)" maxlength="10"/>
  153. </el-form-item>
  154. <el-form-item label="经度" prop="longitude" @dblclick.native="showMap">
  155. <el-input v-model="form.longitude" placeholder="鼠标双击此处以选择经纬度" maxlength="32"/>
  156. </el-form-item>
  157. <el-form-item label="负责人" prop="charger">
  158. <el-input v-model="form.charger" placeholder="请输入负责人" maxlength="20"/>
  159. </el-form-item>
  160. <el-form-item label="隶属企业" prop="enterpriseId">
  161. <el-select v-model="form.enterpriseId" placeholder="请选择">
  162. <el-option
  163. v-for="item in warehouseIdsOptions"
  164. :key="item.id"
  165. :label="item.name"
  166. :value="item.id"/>
  167. </el-select>
  168. </el-form-item>
  169. <el-form-item label="下次巡更时间" prop="patrolNexttime">
  170. <el-date-picker clearable
  171. v-model="form.patrolNexttime"
  172. type="date"
  173. value-format="yyyy-MM-dd"
  174. placeholder="请选择下次巡更时间">
  175. </el-date-picker>
  176. </el-form-item>
  177. <el-form-item label="绑定条码" prop="barCode">
  178. <el-input v-model="form.barCode" placeholder="请输入绑定条码" maxlength="20"/>
  179. </el-form-item>
  180. </el-col>
  181. <el-col :span="12">
  182. <el-form-item label="最后一次巡更时间" prop="patrolLasttime">
  183. <el-date-picker clearable
  184. v-model="form.patrolLasttime"
  185. type="date"
  186. value-format="yyyy-MM-dd"
  187. placeholder="请选择最后一次巡更时间">
  188. </el-date-picker>
  189. </el-form-item>
  190. <el-form-item label="预警阈值" prop="alertDay">
  191. <el-input v-model="form.alertDay" placeholder="请输入预警阈值"
  192. onkeyup="this.value=this.value.replace(/[^\d.]/g,'');" maxlength="10"/>
  193. </el-form-item>
  194. <el-form-item label="纬度" prop="latitude" @dblclick.native="showMap">
  195. <el-input v-model="form.latitude" placeholder="鼠标双击此处以选择经纬度" maxlength="32"/>
  196. </el-form-item>
  197. <el-form-item label="负责人电话" prop="chargerPhone">
  198. <el-input v-model="form.chargerPhone" placeholder="请输入负责人电话" maxlength="13"/>
  199. </el-form-item>
  200. <el-form-item label="地址" prop="patrolpointAddress">
  201. <el-input v-model="form.patrolpointAddress" placeholder="请输入地址" maxlength="40"/>
  202. </el-form-item>
  203. <!-- <el-form-item label="备注" prop="pointRemark">-->
  204. <!-- <el-input v-model="form.pointRemark" placeholder="请输入备注" maxlength="512"/>-->
  205. <!-- </el-form-item>-->
  206. <el-form-item label="所属部门" prop="dataDeptId">
  207. <treeselect v-model="form.dataDeptId" :options="deptOptions" multiple:false :show-count="true"
  208. placeholder="请选择部门" @select="hx" :noResultsText="'空'" :noOptionsText="'空'"/>
  209. </el-form-item>
  210. </el-col>
  211. </el-row>
  212. </el-form>
  213. <div slot="footer" class="dialog-footer">
  214. <el-button type="primary" @click="submitForm">确 定</el-button>
  215. <el-button @click="cancel">取 消</el-button>
  216. </div>
  217. </el-dialog>
  218. <ISuperMap ref="ISuperMap" v-if="ISuperMapvisible" @send="send"/>
  219. </div>
  220. </template>
  221. <script>
  222. import {
  223. addPatrolpoint,
  224. delPatrolpoint,
  225. getPatrolpoint,
  226. listEnterprise,
  227. listPatrolpoint,
  228. updatePatrolpoint
  229. } from "@/api/centerdata_emergency/patrolpoint/patrolpoint";
  230. import deptselector from '@/views/components/deptselector.vue'
  231. import {treeselect} from "@/api/system/dept";
  232. import Treeselect from "@riophae/vue-treeselect";
  233. import "@riophae/vue-treeselect/dist/vue-treeselect.css";
  234. import supermap from '@/views/components/supermap.vue'
  235. import {checkLat, checkLon} from "@/api/rules/rules";
  236. import {checkNonnegativeInteger, validPhoneMobile} from "../../../../api/rules/rules";
  237. import ISuperMap from "@/views/data/common/ISuperMap";
  238. export default {
  239. components: {
  240. Treeselect,
  241. deptselector,
  242. supermap,
  243. ISuperMap
  244. },
  245. name: "Patrolpoint",
  246. data() {
  247. return {
  248. // 遮罩层
  249. loading: true,
  250. // 选中数组
  251. ids: [],
  252. // 非单个禁用
  253. single: true,
  254. sign: 1,
  255. ISuperMapvisible: false,
  256. // 非多个禁用
  257. multiple: true,
  258. // 显示搜索条件
  259. showSearch: true,
  260. showLongitude: false,
  261. titleLongitude: '经纬度',
  262. deptOptions: [],
  263. // 总条数
  264. total: 0,
  265. // 巡更点表格数据
  266. patrolpointList: [],
  267. warehouseIdsOptions: [],
  268. // 弹出层标题
  269. title: "",
  270. // 是否显示弹出层
  271. open: false,
  272. // 查询参数
  273. queryParams: {
  274. pageNum: 1,
  275. pageSize: 10,
  276. deleteBy: null,
  277. deleteTime: null,
  278. dataStatus: null,
  279. name: null,
  280. longitude: null,
  281. latitude: null,
  282. enterpriseId: null,
  283. patrolpointAddress: null,
  284. patrolNexttime: null,
  285. patrolLasttime: null,
  286. patrolCycle: null,
  287. alertDay: null,
  288. charger: null,
  289. chargerPhone: null,
  290. pointRemark: null,
  291. barCode: null,
  292. patrolpointStatus: null,
  293. enterpriseName: null,
  294. owndeptid: null,
  295. dataDeptId: null
  296. },
  297. // 表单参数
  298. form: {},
  299. // 表单校验
  300. rules: {
  301. name: [
  302. {required: true, message: '巡更点名称不能为空', trigger: 'blur'}
  303. ],
  304. charger: [
  305. {required: true, message: '负责人不能为空', trigger: 'blur'}
  306. ],
  307. patrolCycle: [
  308. {required: true, message: '巡更周期不能为空', trigger: 'change'},
  309. {validator: checkNonnegativeInteger,trigger: 'blur'}
  310. ],
  311. enterpriseId: [
  312. {required: true, message: '隶属企业不能为空', trigger: 'change'}
  313. ],
  314. patrolNexttime: [
  315. {required: true, message: '下次巡更时间不能为空', trigger: 'change'}
  316. ],
  317. chargerPhone:[
  318. {required: true, message: '负责人电话不能为空', trigger: 'change'},
  319. {validator:validPhoneMobile ,trigger: 'blur'}
  320. ],
  321. alertDay: [
  322. {required: true, message: '预警阈值不能为空', trigger: 'blur'}
  323. ],
  324. longitude: [
  325. {required: true, message: "经度不能为空", trigger: ["blur","change"]},
  326. {validator: checkLon, trigger: 'blur'}
  327. ],
  328. latitude: [
  329. {required: true, message: "纬度不能为空", trigger: ["blur","change"]},
  330. {validator: checkLat, trigger: 'blur'}
  331. ],
  332. dataDeptId: [
  333. {required: true, message: "所属部门不能为空", trigger: ["blur" , "change"]}
  334. ]
  335. }
  336. };
  337. },
  338. created() {
  339. this.getList();
  340. this.getTreeselect()
  341. this.getWarehouseIds();
  342. },
  343. methods: {
  344. showMap() {
  345. this.ISuperMapvisible = true;
  346. this.$nextTick(() => {
  347. this.$refs.ISuperMap.init(this.sign, {
  348. id: this.form.id,
  349. longitude: this.form.longitude,
  350. latitude: this.form.latitude,
  351. xiantude: this.form.longitude//this.form.longitude换成每个页面对应线或者面对应的字段
  352. })
  353. })
  354. },
  355. send(val) {
  356. if (val===true){
  357. this.ISuperMapvisible = false;
  358. return;
  359. }
  360. if (this.sign === 1) {
  361. this.form.longitude = val.longitude;
  362. this.form.latitude = val.latitude;
  363. }
  364. if (this.sign === 2 || this.sign === 3) this.form.longitude = val.xiantude;//this.form.longitude 换成对应的线或区域的字段
  365. this.ISuperMapvisible = false
  366. },
  367. showLatLng: function (lat, lng) {
  368. this.form.latitude = lat
  369. this.form.longitude = lng
  370. },
  371. setDataDeptId(e) {
  372. this.form.dataDeptId = e.deptId
  373. this.form.deptName = e.deptName
  374. },
  375. getWarehouseIds() {
  376. listEnterprise().then(response => {
  377. this.warehouseIdsOptions = response.rows;
  378. });
  379. },
  380. /** 查询巡更点列表 */
  381. getList() {
  382. this.loading = true;
  383. listPatrolpoint(this.queryParams).then(response => {
  384. this.patrolpointList = response.rows;
  385. this.total = response.total;
  386. this.loading = false;
  387. });
  388. },
  389. // 取消按钮
  390. cancel() {
  391. this.open = false;
  392. this.reset();
  393. },
  394. // 表单重置
  395. reset() {
  396. this.form = {
  397. id: null,
  398. createBy: null,
  399. createTime: null,
  400. updateBy: null,
  401. updateTime: null,
  402. deleteBy: null,
  403. deleteTime: null,
  404. dataStatus: "0",
  405. name: null,
  406. longitude: null,
  407. latitude: null,
  408. enterpriseId: null,
  409. patrolpointAddress: null,
  410. patrolNexttime: null,
  411. patrolLasttime: null,
  412. patrolCycle: null,
  413. alertDay: null,
  414. charger: null,
  415. chargerPhone: null,
  416. pointRemark: null,
  417. barCode: null,
  418. patrolpointStatus: "0",
  419. enterpriseName: null,
  420. owndeptid: null,
  421. dataDeptId: null
  422. };
  423. this.resetForm("form");
  424. },
  425. /**所属部门下拉菜单*/
  426. hx(node) {
  427. this.form.deptId = node.id
  428. this.form.deptName = node.label
  429. this.$refs.form.validateField("deptId")
  430. },
  431. /** 查询部门下拉树结构 */
  432. getTreeselect() {
  433. treeselect().then(response => {
  434. this.deptOptions = response.data;
  435. });
  436. },
  437. /** 搜索按钮操作 */
  438. handleQuery() {
  439. this.queryParams.pageNum = 1;
  440. this.getList();
  441. },
  442. /** 重置按钮操作 */
  443. resetQuery() {
  444. this.resetForm("queryForm");
  445. this.handleQuery();
  446. },
  447. // 多选框选中数据
  448. handleSelectionChange(selection) {
  449. this.ids = selection.map(item => item.id)
  450. this.single = selection.length !== 1
  451. this.multiple = !selection.length
  452. },
  453. /** 新增按钮操作 */
  454. handleAdd() {
  455. this.reset();
  456. this.open = true;
  457. this.title = "添加巡更点";
  458. },
  459. /** 修改按钮操作 */
  460. handleUpdate(row) {
  461. this.reset();
  462. const id = row.id || this.ids
  463. getPatrolpoint(id).then(response => {
  464. this.form = response.data;
  465. this.open = true;
  466. this.title = "修改巡更点";
  467. });
  468. },
  469. /** 提交按钮 */
  470. submitForm() {
  471. console.log(this.form)
  472. this.$refs["form"].validate(valid => {
  473. if (valid) {
  474. if (this.form.id != null) {
  475. updatePatrolpoint(this.form).then(response => {
  476. this.$modal.msgSuccess("修改成功");
  477. this.open = false;
  478. this.getList();
  479. });
  480. } else {
  481. addPatrolpoint(this.form).then(response => {
  482. this.$modal.msgSuccess("新增成功");
  483. this.open = false;
  484. this.getList();
  485. });
  486. }
  487. }
  488. });
  489. },
  490. /** 删除按钮操作 */
  491. handleDelete(row) {
  492. const ids = row.id || this.ids;
  493. this.$modal.confirm('是否确认删除所选的数据项?').then(function () {
  494. return delPatrolpoint(ids);
  495. }).then(() => {
  496. this.getList();
  497. this.$modal.msgSuccess("删除成功");
  498. }).catch(() => {
  499. });
  500. },
  501. /** 导出按钮操作 */
  502. handleExport() {
  503. this.download('sooka-sponest-center-data/emergency/patrolpoint/export', {
  504. ...this.queryParams
  505. }, `巡更点_${new Date().getTime()}.xlsx`)
  506. }
  507. }
  508. };
  509. </script>