index.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578
  1. <template>
  2. <div class="app-container">
  3. <el-dialog :visible.sync="showLongitude" append-to-body>
  4. 经度
  5. <el-input v-model="form.longitude"></el-input>
  6. 纬度
  7. <el-input v-model="form.latitude"></el-input>
  8. <supermap ref="enterprisemap" :visible.sync="showLongitude"
  9. style="width: 100%;height: 500px;" :setLatLng="setLatLng"></supermap>
  10. <el-button type="primary" @click="showLongitude=false">确定</el-button>
  11. </el-dialog>
  12. <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="98px">
  13. <el-form-item label="企业名称" prop="businessName">
  14. <el-input
  15. v-model="queryParams.businessName"
  16. placeholder="请输入企业名称"
  17. clearable
  18. @keyup.enter.native="handleQuery"
  19. />
  20. </el-form-item>
  21. <el-form-item label="所属部门" prop="deptName">
  22. <el-input
  23. v-model="queryParams.deptName"
  24. placeholder="请输入所属部门"
  25. clearable
  26. @keyup.enter.native="handleQuery"
  27. />
  28. </el-form-item>
  29. <el-form-item label="录入人" prop="userName">
  30. <el-input
  31. v-model="queryParams.userName"
  32. placeholder="请输入录入人名称"
  33. clearable
  34. @keyup.enter.native="handleQuery"
  35. />
  36. </el-form-item>
  37. <el-form-item label="组织机构代码" prop="orgCode">
  38. <el-input
  39. v-model="queryParams.orgCode"
  40. placeholder="请输入组织机构代码"
  41. clearable
  42. @keyup.enter.native="handleQuery"
  43. />
  44. </el-form-item>
  45. <el-form-item label="主要负责人" prop="mainPerson">
  46. <el-input
  47. v-model="queryParams.mainPerson"
  48. placeholder="请输入主要负责人"
  49. clearable
  50. @keyup.enter.native="handleQuery"
  51. />
  52. </el-form-item>
  53. <el-form-item label="负责人电话" prop="mainPersonPhone">
  54. <el-input
  55. v-model="queryParams.mainPersonPhone"
  56. placeholder="请输入主要负责人电话"
  57. clearable
  58. @keyup.enter.native="handleQuery"
  59. />
  60. </el-form-item>
  61. <el-form-item label="企业编码" prop="enterpriseCode">
  62. <el-input
  63. v-model="queryParams.enterpriseCode"
  64. placeholder="企业编码"
  65. clearable
  66. @keyup.enter.native="handleQuery"
  67. />
  68. </el-form-item>
  69. <el-form-item>
  70. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  71. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  72. </el-form-item>
  73. </el-form>
  74. <el-row :gutter="10" class="mb8">
  75. <el-col :span="1.5">
  76. <el-button
  77. type="primary"
  78. plain
  79. icon="el-icon-plus"
  80. size="mini"
  81. @click="handleAdd"
  82. v-hasPermi="['system:enterprise:add']"
  83. >新增
  84. </el-button>
  85. </el-col>
  86. <el-col :span="1.5">
  87. <el-button
  88. type="success"
  89. plain
  90. icon="el-icon-edit"
  91. size="mini"
  92. :disabled="single"
  93. @click="handleUpdate"
  94. v-hasPermi="['system:enterprise:edit']"
  95. >修改
  96. </el-button>
  97. </el-col>
  98. <el-col :span="1.5">
  99. <el-button
  100. type="danger"
  101. plain
  102. icon="el-icon-delete"
  103. size="mini"
  104. :disabled="multiple"
  105. @click="handleDelete"
  106. v-hasPermi="['system:enterprise:remove']"
  107. >删除
  108. </el-button>
  109. </el-col>
  110. <el-col :span="1.5">
  111. <el-button
  112. type="warning"
  113. plain
  114. icon="el-icon-download"
  115. size="mini"
  116. @click="handleExport"
  117. v-hasPermi="['system:enterprise:export']"
  118. >导出
  119. </el-button>
  120. </el-col>
  121. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  122. </el-row>
  123. <el-table v-loading="loading" :data="enterpriseList" @selection-change="handleSelectionChange">
  124. <el-table-column type="selection" width="55" align="center"/>
  125. <el-table-column label="企业名称" align="center" prop="businessName"/>
  126. <el-table-column label="经营地址" align="center" prop="businessAddress"/>
  127. <el-table-column label="办公地址" align="center" prop="officeAddress"/>
  128. <el-table-column label="主要负责人" align="center" prop="mainPerson"/>
  129. <el-table-column label="主要负责人电话" align="center" prop="mainPersonPhone"/>
  130. <el-table-column label="所属部门" align="center" prop="deptName" />
  131. <el-table-column label="录入人" align="center" prop="userName" />
  132. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  133. <template slot-scope="scope">
  134. <el-button
  135. size="mini"
  136. type="text"
  137. icon="el-icon-edit"
  138. v-if="scope.row.userId == loginUserId"
  139. @click="handleUpdate(scope.row)"
  140. v-hasPermi="['system:enterprise:edit']"
  141. >修改
  142. </el-button>
  143. <el-button
  144. size="mini"
  145. type="text"
  146. icon="el-icon-delete"
  147. @click="handleDelete(scope.row)"
  148. v-if="scope.row.userId == loginUserId"
  149. v-hasPermi="['system:enterprise:remove']"
  150. >废弃
  151. </el-button>
  152. <el-button
  153. size="mini"
  154. type="text"
  155. icon="el-icon-delete"
  156. @click="handleDetail(scope.row)"
  157. v-hasPermi="['system:enterprise:remove']"
  158. >详情
  159. </el-button>
  160. <el-button
  161. size="mini"
  162. type="text"
  163. icon="list-icon-sj iconfont icon-richangxuncha"
  164. @click="toXuncha(scope.row)"
  165. v-hasPermi="['system:enterprise:remove']"
  166. >巡查
  167. </el-button>
  168. <el-button
  169. size="mini"
  170. type="text"
  171. icon="list-icon-sj iconfont icon-xungengdian"
  172. v-if="scope.row.userId == loginUserId"
  173. @click="toPatrolstation(scope.row)"
  174. v-hasPermi="['system:enterprise:remove']"
  175. >巡更点
  176. </el-button>
  177. </template>
  178. </el-table-column>
  179. </el-table>
  180. <pagination
  181. v-show="total>0"
  182. :total="total"
  183. :page.sync="queryParams.pageNum"
  184. :limit.sync="queryParams.pageSize"
  185. @pagination="getList"
  186. />
  187. <!-- 添加或修改企业对话框 -->
  188. <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
  189. <el-form ref="form" :model="form" :rules="rules" label-width="180px">
  190. <el-row>
  191. <el-col :span="12">
  192. <el-form-item label="所属部门" prop="deptId">
  193. <!--<el-input v-model="form.deptId" placeholder="请选择企业所属部门"/>-->
  194. <treeselect :disabled="isDetail" v-model="form.deptId" :options="deptOptions" :show-count="true"
  195. placeholder="请选择归属部门"/>
  196. </el-form-item>
  197. </el-col>
  198. <el-col :span="12">
  199. <el-form-item label="企业登录人账号" prop="accountId">
  200. <el-input v-model="form.accountId" placeholder="请选择企业登录人账号" disabled/>
  201. </el-form-item>
  202. </el-col>
  203. </el-row>
  204. <el-row>
  205. <el-col :span="12">
  206. <el-form-item label="企业名称" prop="businessName">
  207. <el-input :disabled="isDetail" v-model="form.businessName" placeholder="请输入企业名称"/>
  208. </el-form-item>
  209. </el-col>
  210. <el-col :span="12">
  211. <el-form-item label="经营地址" prop="businessAddress">
  212. <el-input :disabled="isDetail" v-model="form.businessAddress" placeholder="请输入经营地址"/>
  213. </el-form-item>
  214. </el-col>
  215. </el-row>
  216. <el-row>
  217. <el-col :span="12">
  218. <el-form-item label="办公地址" prop="officeAddress">
  219. <el-input :disabled="isDetail" v-model="form.officeAddress" placeholder="请输入办公地址"/>
  220. </el-form-item>
  221. </el-col>
  222. <el-col :span="12">
  223. <el-form-item label="组织机构代码" prop="orgCode">
  224. <el-input :disabled="isDetail" v-model="form.orgCode" placeholder="请输入组织机构代码"/>
  225. </el-form-item>
  226. </el-col>
  227. </el-row>
  228. <el-row>
  229. <el-col :span="12">
  230. <el-form-item label="主要负责人" prop="mainPerson">
  231. <el-input :disabled="isDetail" v-model="form.mainPerson" placeholder="请输入主要负责人"/>
  232. </el-form-item>
  233. </el-col>
  234. <el-col :span="12">
  235. <el-form-item label="主要负责人电话" prop="mainPersonPhone">
  236. <el-input :disabled="isDetail" v-model="form.mainPersonPhone" placeholder="请输入主要负责人电话"/>
  237. </el-form-item>
  238. </el-col>
  239. </el-row>
  240. <el-row>
  241. <el-col :span="12">
  242. <el-form-item label="安全负责人" prop="headSecurity">
  243. <el-input :disabled="isDetail" v-model="form.headSecurity" placeholder="请输入安全负责人"/>
  244. </el-form-item>
  245. </el-col>
  246. <el-col :span="12">
  247. <el-form-item label="安全负责人电话" prop="headSecurityPhone">
  248. <el-input :disabled="isDetail" v-model="form.headSecurityPhone" placeholder="请输入安全负责人电话"/>
  249. </el-form-item>
  250. </el-col>
  251. </el-row>
  252. <el-row>
  253. <el-col :span="12">
  254. <el-form-item label="属地监管人员" prop="supervisor">
  255. <el-input :disabled="isDetail" v-model="form.supervisor" placeholder="请输入属地监管人员"/>
  256. </el-form-item>
  257. </el-col>
  258. <el-col :span="12">
  259. <el-form-item label="区县行业主管部门" prop="tradeDept">
  260. <el-input :disabled="isDetail" v-model="form.tradeDept" placeholder="请输入区县行业主管部门"/>
  261. </el-form-item>
  262. </el-col>
  263. </el-row>
  264. <el-row>
  265. <el-col :span="12">
  266. <el-form-item label="经度" prop="longitude" @dblclick.native="showMap">
  267. <el-input :disabled="isDetail" v-model="form.longitude" placeholder="请输入经度"/>
  268. </el-form-item>
  269. </el-col>
  270. <el-col :span="12">
  271. <el-form-item label="纬度" prop="latitude" @dblclick.native="showMap">
  272. <el-input :disabled="isDetail" v-model="form.latitude" placeholder="请输入纬度"/>
  273. </el-form-item>
  274. </el-col>
  275. </el-row>
  276. <el-row>
  277. <el-col :span="12">
  278. <el-form-item label="企业编码" prop="enterpriseCode">
  279. <el-input :disabled="isDetail" v-model="form.enterpriseCode" placeholder="企业编码"/>
  280. </el-form-item>
  281. </el-col>
  282. </el-row>
  283. </el-form>
  284. <div slot="footer" class="dialog-footer">
  285. <el-button type="primary" @click="submitForm" v-show="!isDetail">确 定</el-button>
  286. <el-button @click="cancel">取 消</el-button>
  287. </div>
  288. </el-dialog>
  289. </div>
  290. </template>
  291. <script>
  292. import Treeselect from "@riophae/vue-treeselect";
  293. import "@riophae/vue-treeselect/dist/vue-treeselect.css";
  294. import {listEnterprise, getEnterprise, delEnterprise, addEnterprise, updateEnterprise} from "@/api/centerdata_emergency1/enterprise";
  295. import {listUser, deptTreeSelect,} from "@/api/system/user";
  296. import {getLoginUser} from "@/api/centerdata_emergency1/main";
  297. import supermap from './supermap'
  298. export default {
  299. components: {
  300. Treeselect,
  301. supermap
  302. },
  303. name: "Enterprise",
  304. data() {
  305. return {
  306. showLongitude: false,
  307. isDetail: false,
  308. //当前登录人ID
  309. loginUserId: 0,
  310. // 遮罩层
  311. loading: true,
  312. // 部门树选项
  313. deptOptions: undefined,
  314. // 选中数组
  315. ids: [],
  316. enterpriseNames: [],
  317. // 非单个禁用
  318. single: true,
  319. // 非多个禁用
  320. multiple: true,
  321. // 显示搜索条件
  322. showSearch: true,
  323. // 总条数
  324. total: 0,
  325. // 企业表格数据
  326. enterpriseList: [],
  327. // 弹出层标题
  328. title: "",
  329. // 是否显示弹出层
  330. open: false,
  331. // 查询参数
  332. queryParams: {
  333. pageNum: 1,
  334. pageSize: 10,
  335. deptId: null,
  336. userId: null,
  337. accountId: null,
  338. businessName: null,
  339. businessAddress: null,
  340. officeAddress: null,
  341. orgCode: null,
  342. mainPerson: null,
  343. mainPersonPhone: null,
  344. headSecurity: null,
  345. headSecurityPhone: null,
  346. supervisor: null,
  347. tradeDept: null,
  348. longitude: null,
  349. latitude: null,
  350. dataStatus: null,
  351. deptName: null,
  352. userName: null,
  353. },
  354. // 表单参数
  355. form: {},
  356. // 表单校验
  357. rules: {
  358. deptId: [
  359. {required: true, message: "所属部门不能为空", trigger: "blur"}
  360. ],
  361. enterpriseCode: [
  362. {required: true, message: "企业码不能为空", trigger: "blur"}
  363. ],
  364. businessName: [
  365. {required: true, message: "企业名称不能为空", trigger: "blur"}
  366. ],
  367. longitude: [
  368. {required: true, message: "经纬度坐标不能为空", trigger: "blur"},
  369. {
  370. type: "number", message: "经纬度只能为数字", trigger: "blur", transform(value) {
  371. return Number(value)
  372. }
  373. }
  374. ],
  375. mainPersonPhone: [
  376. {
  377. pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
  378. message: "请输入正确的手机号码",
  379. trigger: "blur"
  380. }
  381. ],
  382. headSecurityPhone: [
  383. {
  384. pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
  385. message: "请输入正确的手机号码",
  386. trigger: "blur"
  387. }
  388. ],
  389. latitude: [
  390. {required: true, message: "经纬度坐标不能为空", trigger: "blur"},
  391. {
  392. type: "number", message: "经纬度只能为数字", trigger: "blur", transform(value) {
  393. return Number(value)
  394. }
  395. }
  396. ],
  397. }
  398. };
  399. },
  400. created() {
  401. this.getList();
  402. this.getDeptTree();
  403. this.getLoginUser();
  404. },
  405. methods: {
  406. getLoginUser() {
  407. getLoginUser().then(response => {
  408. this.loginUserId = response.data.userid;
  409. });
  410. },
  411. toXuncha(row) {
  412. this.$router.push({path: '/edyj/log', query: {busEnterpriseId: row.busEnterpriseId}})
  413. },
  414. toPatrolstation(row) {
  415. this.$router.push({
  416. path: '/edyj/patrolstation',
  417. query: {busEnterpriseId: row.busEnterpriseId, busEnterpriseName: row.busEnterpriseName}
  418. })
  419. },
  420. showMap() {
  421. if (!this.isDetail) {
  422. this.showLongitude = true
  423. this.$nextTick(() => {
  424. if (this.form.latitude != null && this.form.latitude != undefined && this.form.longitude != null && this.form.longitude != undefined) {
  425. this.$refs.enterprisemap.setMarker(this.form.latitude, this.form.longitude)
  426. }
  427. })
  428. }
  429. },
  430. setLatLng: function (lat, lng) {
  431. this.form.latitude = lat
  432. this.form.longitude = lng
  433. },
  434. getDeptTree() {
  435. deptTreeSelect().then(response => {
  436. this.deptOptions = response.data;
  437. });
  438. },
  439. /** 查询企业列表 */
  440. getList() {
  441. this.loading = true;
  442. listEnterprise(this.queryParams).then(response => {
  443. this.enterpriseList = response.rows;
  444. this.total = response.total;
  445. this.loading = false;
  446. });
  447. },
  448. // 取消按钮
  449. cancel() {
  450. this.open = false;
  451. this.reset();
  452. },
  453. // 表单重置
  454. reset() {
  455. this.form = {
  456. busEnterpriseId: null,
  457. deptId: null,
  458. userId: null,
  459. accountId: null,
  460. businessName: null,
  461. businessAddress: null,
  462. officeAddress: null,
  463. orgCode: null,
  464. mainPerson: null,
  465. mainPersonPhone: null,
  466. headSecurity: null,
  467. headSecurityPhone: null,
  468. supervisor: null,
  469. tradeDept: null,
  470. createTime: null,
  471. longitude: null,
  472. latitude: null,
  473. dataStatus: null
  474. };
  475. this.resetForm("form");
  476. },
  477. /** 搜索按钮操作 */
  478. handleQuery() {
  479. this.queryParams.pageNum = 1;
  480. this.getList();
  481. },
  482. /** 重置按钮操作 */
  483. resetQuery() {
  484. this.resetForm("queryForm");
  485. this.handleQuery();
  486. },
  487. // 多选框选中数据
  488. handleSelectionChange(selection) {
  489. this.ids = selection.map(item => item.busEnterpriseId)
  490. this.enterpriseNames = selection.map(item => item.businessName)
  491. this.single = selection.length !== 1
  492. this.multiple = !selection.length
  493. },
  494. /** 新增按钮操作 */
  495. handleAdd() {
  496. this.isDetail = false
  497. this.reset();
  498. this.open = true;
  499. this.title = "添加企业";
  500. },
  501. /** 修改按钮操作 */
  502. handleUpdate(row) {
  503. this.isDetail = false
  504. this.reset();
  505. const busEnterpriseId = row.busEnterpriseId || this.ids
  506. getEnterprise(busEnterpriseId).then(response => {
  507. this.form = response.data;
  508. this.open = true;
  509. this.title = "修改企业";
  510. });
  511. },
  512. handleDetail(row) {
  513. this.isDetail = true
  514. this.reset();
  515. const busEnterpriseId = row.busEnterpriseId || this.ids
  516. getEnterprise(busEnterpriseId).then(response => {
  517. this.form = response.data;
  518. this.open = true;
  519. this.title = "企业信息详情";
  520. });
  521. },
  522. /** 提交按钮 */
  523. submitForm() {
  524. this.$refs["form"].validate(valid => {
  525. if (valid) {
  526. if (this.form.busEnterpriseId != null) {
  527. updateEnterprise(this.form).then(response => {
  528. this.$modal.msgSuccess("修改成功");
  529. this.open = false;
  530. this.getList();
  531. });
  532. } else {
  533. addEnterprise(this.form).then(response => {
  534. this.$modal.msgSuccess("新增成功");
  535. this.open = false;
  536. this.getList();
  537. });
  538. }
  539. }
  540. });
  541. },
  542. /** 删除按钮操作 */
  543. handleDelete(row) {
  544. const busEnterpriseIds = row.busEnterpriseId || this.ids;
  545. const enterpriseNames = row.businessName || this.enterpriseNames;
  546. this.$modal.confirm('是否确认废弃企业为["' + enterpriseNames + '"]的数据项?').then(function () {
  547. return delEnterprise(busEnterpriseIds);
  548. }).then(() => {
  549. this.getList();
  550. this.$modal.msgSuccess("废弃成功");
  551. }).catch(() => {
  552. });
  553. },
  554. /** 导出按钮操作 */
  555. handleExport() {
  556. this.download('system/enterprise/export', {
  557. ...this.queryParams
  558. }, `enterprise_${new Date().getTime()}.xlsx`)
  559. }
  560. }
  561. };
  562. </script>