index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" @submit.native.prevent>
  4. <el-form-item label="名称" prop="name">
  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 label="联系人" prop="contacts">
  13. <el-input
  14. v-model="queryParams.contacts"
  15. placeholder="请输入联系人"
  16. clearable
  17. @keyup.enter.native="handleQuery"
  18. />
  19. </el-form-item>
  20. <el-form-item prop="deptId">
  21. <template slot="label">
  22. <span @click="changeQueryType" v-if="queryParams.deptName == 0">本级及下级</span>
  23. <span @click="changeQueryType" v-if="queryParams.deptName == 1">只查询本级</span>
  24. </template>
  25. <treeselect v-model="queryParams.deptId" :options="deptOptions" multiple:false :show-count="true"
  26. placeholder="请选择部门" @select="hx" :noResultsText="'空'" :noOptionsText="'空'" style="width: 240px"/>
  27. <el-input v-model="queryParams.deptName" v-if="false"/>
  28. </el-form-item>
  29. <el-form-item>
  30. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  31. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  32. </el-form-item>
  33. </el-form>
  34. <el-row :gutter="10" class="mb8">
  35. <el-col :span="1.5">
  36. <el-button
  37. type="primary"
  38. plain
  39. icon="el-icon-plus"
  40. size="mini"
  41. @click="handleAdd"
  42. v-hasPermi="['digitalagriculture:enterprise:add']"
  43. >新增
  44. </el-button>
  45. </el-col>
  46. <el-col :span="1.5">
  47. <el-button
  48. type="success"
  49. plain
  50. icon="el-icon-edit"
  51. size="mini"
  52. :disabled="single"
  53. @click="handleUpdate"
  54. v-hasPermi="['digitalagriculture:enterprise:edit']"
  55. >修改
  56. </el-button>
  57. </el-col>
  58. <el-col :span="1.5">
  59. <el-button
  60. type="danger"
  61. plain
  62. icon="el-icon-delete"
  63. size="mini"
  64. :disabled="multiple"
  65. @click="handleDelete"
  66. v-hasPermi="['digitalagriculture:enterprise:remove']"
  67. >删除
  68. </el-button>
  69. </el-col>
  70. <el-col :span="1.5">
  71. <el-button
  72. type="warning"
  73. plain
  74. icon="el-icon-download"
  75. size="mini"
  76. @click="handleExport"
  77. v-hasPermi="['digitalagriculture:enterprise:export']"
  78. >导出
  79. </el-button>
  80. </el-col>
  81. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  82. </el-row>
  83. <el-table v-loading="loading" :data="enterpriseList" @selection-change="handleSelectionChange">
  84. <el-table-column type="selection" width="55" align="center"/>
  85. <el-table-column label="所属部门" align="center" prop="deptName"/>
  86. <el-table-column label="经度" align="center" prop="longitude"/>
  87. <el-table-column label="纬度" align="center" prop="latitude"/>
  88. <el-table-column label="名称" align="center" prop="name"/>
  89. <el-table-column label="地点" align="center" prop="address"/>
  90. <el-table-column label="经营范围" align="center" prop="businessScope"/>
  91. <el-table-column label="许可证号1" align="center" prop="permitOne"/>
  92. <el-table-column label="许可证号2" align="center" prop="permitTwo"/>
  93. <el-table-column label="许可证号3" align="center" prop="permitThree"/>
  94. <el-table-column label="许可证号4" align="center" prop="permitFour"/>
  95. <el-table-column label="许可证号5" align="center" prop="permitFive"/>
  96. <el-table-column label="设计规模" align="center" prop="designScale"/>
  97. <el-table-column label="联系人" align="center" prop="contacts"/>
  98. <el-table-column label="联系电话" align="center" prop="phone"/>
  99. <el-table-column label="创建人" align="center" prop="createName" />
  100. <el-table-column label="创建时间" align="center" prop="createTime" />
  101. <el-table-column label="修改人" align="center" prop="updateName" />
  102. <el-table-column label="修改时间" align="center" prop="updateTime" />
  103. <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right">
  104. <template slot-scope="scope">
  105. <el-button
  106. size="mini"
  107. type="text"
  108. icon="el-icon-edit"
  109. @click="handleUpdate(scope.row)"
  110. v-hasPermi="['digitalagriculture:enterprise:edit']"
  111. >修改
  112. </el-button>
  113. <el-button
  114. size="mini"
  115. type="text"
  116. icon="el-icon-delete"
  117. @click="handleDelete(scope.row)"
  118. v-hasPermi="['digitalagriculture:enterprise:remove']"
  119. >删除
  120. </el-button>
  121. </template>
  122. </el-table-column>
  123. </el-table>
  124. <pagination
  125. v-show="total>0"
  126. :total="total"
  127. :page.sync="queryParams.pageNum"
  128. :limit.sync="queryParams.pageSize"
  129. @pagination="getList"
  130. />
  131. <!-- 添加或修改生鲜乳收购站、屠宰企业、饲料企业对话框 -->
  132. <el-dialog :title="title" :visible.sync="open" width="1000px" class="form-style">
  133. <el-form ref="form" :model="form" :rules="rules" label-width="80px" @submit.native.prevent="submitForm">
  134. <el-row :gutter="20">
  135. <el-col :span="12">
  136. <el-form-item label="名称" prop="name">
  137. <el-input v-model="form.name" placeholder="请输入名称" maxlength="50"/>
  138. </el-form-item>
  139. </el-col>
  140. <el-col :span="12">
  141. <el-form-item label="所属部门" prop="deptId" class="form-style">
  142. <!-- <Deptselector :setValue=setDataDeptId :dataDeptId="form.deptId"/>-->
  143. <treeselect v-model="form.deptId" :options="deptOptions" multiple:false :show-count="true" :noResultsText="'空'" :noOptionsText="'空'"
  144. placeholder="请选择部门" @select="hx"/>
  145. </el-form-item>
  146. </el-col>
  147. </el-row>
  148. <el-row :gutter="20">
  149. <el-col :span="12">
  150. <el-form-item label="联系人" prop="contacts">
  151. <el-input v-model="form.contacts" placeholder="请输入联系人" maxlength="32"/>
  152. </el-form-item>
  153. </el-col>
  154. <el-col :span="12">
  155. <el-form-item label="联系电话" prop="phone">
  156. <el-input v-model="form.phone" placeholder="请输入联系电话" maxlength="13"/>
  157. </el-form-item>
  158. </el-col>
  159. </el-row>
  160. <el-row :gutter="20">
  161. <el-col :span="12">
  162. <el-form-item label="地点" prop="address">
  163. <el-input v-model="form.address" placeholder="请输入地点" maxlength="255"/>
  164. </el-form-item>
  165. </el-col>
  166. <el-col :span="12">
  167. <el-form-item label="设计规模" prop="designScale">
  168. <el-input v-model="form.designScale" placeholder="请输入设计规模" maxlength="32"/>
  169. </el-form-item>
  170. </el-col>
  171. </el-row>
  172. <el-row :gutter="20">
  173. <el-col :span="12">
  174. <el-form-item label="经度" prop="longitude" @dblclick.native="showMap">
  175. <el-input v-model="form.longitude" placeholder="鼠标双击选择经纬度" maxlength="32"/>
  176. </el-form-item>
  177. </el-col>
  178. <el-col :span="12">
  179. <el-form-item label="纬度" prop="latitude" @dblclick.native="showMap">
  180. <el-input v-model="form.latitude" placeholder="鼠标双击选择经纬度" maxlength="32"/>
  181. </el-form-item>
  182. </el-col>
  183. </el-row>
  184. <el-row :gutter="20">
  185. <el-col :span="12">
  186. <el-form-item label="许可证号1" prop="permitOne">
  187. <el-input v-model="form.permitOne" placeholder="请输入许可证号1" maxlength="50"/>
  188. </el-form-item>
  189. </el-col>
  190. <el-col :span="12">
  191. <el-form-item label="许可证号2" prop="permitTwo">
  192. <el-input v-model="form.permitTwo" placeholder="请输入许可证号2" maxlength="50"/>
  193. </el-form-item>
  194. </el-col>
  195. </el-row>
  196. <el-row :gutter="20">
  197. <el-col :span="12">
  198. <el-form-item label="许可证号3" prop="permitThree">
  199. <el-input v-model="form.permitThree" placeholder="请输入许可证号3" maxlength="50"/>
  200. </el-form-item>
  201. </el-col>
  202. <el-col :span="12">
  203. <el-form-item label="许可证号4" prop="permitFour">
  204. <el-input v-model="form.permitFour" placeholder="请输入许可证号4" maxlength="50"/>
  205. </el-form-item>
  206. </el-col>
  207. </el-row>
  208. <el-row :gutter="20">
  209. <el-col :span="12">
  210. <el-form-item label="许可证号5" prop="permitFive">
  211. <el-input v-model="form.permitFive" placeholder="请输入许可证号5" maxlength="50"/>
  212. </el-form-item>
  213. </el-col>
  214. <el-col :span="12">
  215. <el-form-item label="绑定设备" prop="deviceList">
  216. <el-select v-model="form.deviceList" filterable placeholder="请选择设备" multiple>
  217. <el-option
  218. v-for="dict in cameraList"
  219. :key="dict.id"
  220. :label="dict.cameraName"
  221. :value="dict.id"
  222. ></el-option>
  223. </el-select>
  224. </el-form-item>
  225. </el-col>
  226. </el-row>
  227. <el-row>
  228. <el-col :span="24">
  229. <el-form-item label="经营范围" prop="businessScope">
  230. <el-input v-model="form.businessScope" type="textarea" placeholder="请输入经营范围" maxlength="200"/>
  231. </el-form-item>
  232. <el-form-item label="附件" prop="attachId">
  233. <fileUpload :value="[form.fileUrl,form.fileName]" v-model="form.fileUrl" :setFileName="setFileName"
  234. :removeFileName="removeFileName"></fileUpload>
  235. </el-form-item>
  236. </el-col>
  237. </el-row>
  238. <el-row>
  239. <el-col :span="24">
  240. <el-form-item label="图片" prop="attachPaths">
  241. <DataImageUpload ref="ImageUpload" :file-type="['png','jpg','jpeg']" :value="form.attachPaths" @input="getUrl"/>
  242. </el-form-item>
  243. </el-col>
  244. </el-row>
  245. </el-form>
  246. <div slot="footer" class="dialog-footer">
  247. <el-button type="primary" @click="submitForm">确 定</el-button>
  248. <el-button @click="cancel">取 消</el-button>
  249. </div>
  250. </el-dialog>
  251. <!-- <el-dialog title="经纬度" :visible.sync="showLongitude" append-to-body>-->
  252. <!-- <el-input v-show="false" v-model="form.longitude" disabled></el-input>-->
  253. <!-- <el-input v-show="false" v-model="form.latitude" disabled></el-input>-->
  254. <!-- <supermap style="width: 100%;height: 500px;" :mapDiv="'enterprise'" :mapSite="{doubleClickZoom:false}"-->
  255. <!-- :codes="['9fa5']" :isSideBySide="false" :showLatLng="showLatLng"></supermap>-->
  256. <!-- <el-button type="primary" @click="showLongitude=false">确定</el-button>-->
  257. <!-- </el-dialog>-->
  258. <ISuperMap ref="ISuperMap" v-if="ISuperMapvisible" @send="send"/>
  259. </div>
  260. </template>
  261. <script>
  262. import {
  263. addEnterprise,
  264. delEnterprise,
  265. getEnterprise,
  266. listEnterprise,
  267. updateEnterprise
  268. } from "@/api/data/digitalagriculture/enterprise";
  269. import Deptselector from '@/views/components/deptselector';
  270. import Supermap from '@/views/components/supermap';
  271. import {checkLat, checkLon, validPhoneMobile} from "@/api/rules/rules";
  272. import fileUpload from '@/views/components/FileUpload/index'
  273. import {format_date} from "@/views/data/common/dateExport";
  274. import {selectCenterMonitorlList} from "@/api/data/digitalforest/animal/animal";
  275. import { treeselect } from "@/api/system/dept";
  276. import Treeselect from '@riophae/vue-treeselect'
  277. import '@riophae/vue-treeselect/dist/vue-treeselect.css'
  278. import ISuperMap from "@/views/data/common/ISuperMap.vue";
  279. import DataImageUpload from "@/components/ImageUpload/dataUpload.vue"
  280. export default {
  281. name: "Enterprise",
  282. dicts: ['sys_dept_type'],
  283. components: {ISuperMap, Deptselector, Supermap,fileUpload , Treeselect ,DataImageUpload},
  284. data() {
  285. return {
  286. ISuperMapvisible: false,
  287. sign: 1,
  288. cameraList: [],//设备集合
  289. fileNames: [],
  290. // 遮罩层
  291. loading: true,
  292. // 选中数组
  293. ids: [],
  294. // 非单个禁用
  295. single: true,
  296. // 非多个禁用
  297. multiple: true,
  298. // 显示搜索条件
  299. showSearch: true,
  300. // 总条数
  301. total: 0,
  302. // 生鲜乳收购站、屠宰企业、饲料企业表格数据
  303. enterpriseList: [],
  304. // 弹出层标题
  305. title: "",
  306. // 是否显示弹出层
  307. open: false,
  308. // 部门名称
  309. deptName: undefined,
  310. // 部门树选项
  311. deptOptions: [],
  312. // 查询参数
  313. queryParams: {
  314. pageNum: 1,
  315. pageSize: 10,
  316. deptName: 0,
  317. longitude: null,
  318. latitude: null,
  319. name: null,
  320. address: null,
  321. businessScope: null,
  322. permitOne: null,
  323. permitTwo: null,
  324. permitThree: null,
  325. permitFour: null,
  326. permitFive: null,
  327. designScale: null,
  328. contacts: null,
  329. phone: null,
  330. deptId: null,
  331. },
  332. // 表单参数
  333. form: {
  334. fileUrl: '',
  335. fileName: '',
  336. fileUrlList: [],
  337. fileNameList: []
  338. },
  339. // 表单校验
  340. rules: {
  341. deptId: [
  342. {required: true, message: "所属部门不能为空", trigger: "change"}
  343. ],
  344. name: [
  345. {required: true, message: "名称不能为空", trigger: "change"}
  346. ],
  347. contacts: [
  348. {required: true, message: "联系人不能为空", trigger: "change"}
  349. ],
  350. phone: [
  351. {required: true, message: "联系电话不能为空", trigger: "change"},
  352. {validator: validPhoneMobile, trigger: 'change'}
  353. ],
  354. longitude: [
  355. {required: true, message: "经度不能为空", trigger: "change"},
  356. {validator: checkLon, trigger: 'change'}
  357. ],
  358. latitude: [
  359. {required: true, message: "纬度不能为空", trigger: "change"},
  360. {validator: checkLat, trigger: 'change'}
  361. ]
  362. },
  363. showLongitude: false
  364. };
  365. },
  366. created() {
  367. this.queryParams.type = this.$route.query.type;
  368. this.getList();
  369. this.getTreeselect();
  370. },
  371. methods: {
  372. showMap() {
  373. this.ISuperMapvisible = true;
  374. this.$nextTick(() => {
  375. this.$refs.ISuperMap.init(this.sign, {
  376. id: this.form.id,
  377. longitude: this.form.longitude,
  378. latitude: this.form.latitude,
  379. // 对应显示线 或 面
  380. // xiantude: this.form.longitude
  381. })
  382. })
  383. },
  384. send(val) {
  385. if (val===true){
  386. this.ISuperMapvisible = false;
  387. return;
  388. }
  389. if (this.sign === 1) {
  390. this.form.longitude = val.longitude;
  391. this.form.latitude = val.latitude;
  392. }
  393. // if (this.sign === 2 || this.sign === 3) this.form.longitude = val.xiantude;
  394. this.ISuperMapvisible = false
  395. },
  396. /** 查询部门下拉树结构 */
  397. getTreeselect() {
  398. treeselect().then(response => {
  399. this.deptOptions = response.data;
  400. });
  401. },
  402. hx(node) {
  403. this.form.dataDeptId = node.id
  404. this.form.deptId = node.id
  405. this.form.deptName = node.label
  406. this.$refs.form.validateField('deptId');
  407. },
  408. getUrl(url) {
  409. this.form.attachPaths = url
  410. },
  411. setFileName(fileName) {
  412. let that = this
  413. that.fileNames.push(fileName)
  414. },
  415. removeFileName(index) {
  416. let that = this
  417. that.fileNames.splice(index, 1);
  418. let fileurls = that.form.fileUrl.split(",")
  419. fileurls.splice(index, 1)
  420. that.form.fileUrl = fileurls.toString()
  421. },
  422. setDataDeptId(e) {
  423. this.form.deptId = e.deptId
  424. this.form.deptName = e.deptName
  425. },
  426. /** 查询生鲜乳收购站、屠宰企业、饲料企业列表 */
  427. getList() {
  428. this.loading = true;
  429. listEnterprise(this.queryParams).then(response => {
  430. this.enterpriseList = response.rows;
  431. this.total = response.total;
  432. this.loading = false;
  433. });
  434. },
  435. // 取消按钮
  436. cancel() {
  437. this.open = false;
  438. this.reset();
  439. },
  440. // 表单重置
  441. reset() {
  442. this.form = {
  443. id: null,
  444. createBy: null,
  445. createName: null,
  446. createTime: null,
  447. updateBy: null,
  448. updateName: null,
  449. updateTime: null,
  450. deptId: null,
  451. deptName: null,
  452. longitude: null,
  453. latitude: null,
  454. name: null,
  455. address: null,
  456. businessScope: null,
  457. permitOne: null,
  458. permitTwo: null,
  459. permitThree: null,
  460. permitFour: null,
  461. permitFive: null,
  462. designScale: null,
  463. contacts: null,
  464. phone: null,
  465. attachId: null,
  466. type: this.queryParams.type
  467. };
  468. this.fileNames = []
  469. this.resetForm("form");
  470. },
  471. /** 搜索按钮操作 */
  472. handleQuery() {
  473. this.queryParams.pageNum = 1;
  474. this.getList();
  475. },
  476. /** 重置按钮操作 */
  477. resetQuery() {
  478. this.queryParams.deptName = 0;
  479. this.resetForm("queryForm");
  480. this.handleQuery();
  481. },
  482. // 多选框选中数据
  483. handleSelectionChange(selection) {
  484. this.ids = selection.map(item => item.id)
  485. this.single = selection.length !== 1
  486. this.multiple = !selection.length
  487. },
  488. /** 新增按钮操作 */
  489. handleAdd() {
  490. this.reset();
  491. this.open = true;
  492. if (this.queryParams.type === "1") {
  493. this.title = "添加生鲜乳收购站";
  494. }
  495. if (this.queryParams.type === "2") {
  496. this.title = "添加屠宰企业";
  497. }
  498. if (this.queryParams.type === "3") {
  499. this.title = "添加饲料企业";
  500. }
  501. selectCenterMonitorlList(this.queryParams).then(response => {
  502. this.cameraList = response.data;
  503. });
  504. },
  505. /** 修改按钮操作 */
  506. handleUpdate(row) {
  507. this.reset();
  508. const id = row.id || this.ids
  509. selectCenterMonitorlList(this.queryParams).then(response => {
  510. this.cameraList = response.data;
  511. });
  512. getEnterprise(id).then(response => {
  513. const list = response.data.fileUrl.split(',');
  514. if (response.data.fileUrl != "") {
  515. for (var a = 0; a < list.length; a++) {
  516. let listurl = list[a].split('+')
  517. this.fileNames.push(listurl[1])
  518. }
  519. }
  520. this.form = response.data;
  521. this.open = true;
  522. if (this.queryParams.type === "1") {
  523. this.title = "修改生鲜乳收购站";
  524. }
  525. if (this.queryParams.type === "2") {
  526. this.title = "修改屠宰企业";
  527. }
  528. if (this.queryParams.type === "3") {
  529. this.title = "修改饲料企业";
  530. }
  531. });
  532. },
  533. /** 提交按钮 */
  534. submitForm() {
  535. this.$refs["form"].validate(valid => {
  536. if (valid) {
  537. this.form.fileName = this.fileNames.toString()
  538. this.form.fileNameList = this.fileNames;
  539. this.form.fileUrlList = Array.from(document.querySelectorAll('.el-upload-list__item')).map(item => item.querySelector('a').getAttribute('href'));
  540. if (this.form.id != null) {
  541. updateEnterprise(this.form).then(response => {
  542. this.$modal.msgSuccess("修改成功");
  543. this.open = false;
  544. this.getList();
  545. });
  546. } else {
  547. addEnterprise(this.form).then(response => {
  548. this.$modal.msgSuccess("新增成功");
  549. this.open = false;
  550. this.getList();
  551. });
  552. }
  553. }
  554. });
  555. },
  556. /** 删除按钮操作 */
  557. handleDelete(row) {
  558. const ids = row.id || this.ids;
  559. this.$modal.confirm('是否确认删除已选择的的数据项?').then(function () {
  560. return delEnterprise(ids);
  561. }).then(() => {
  562. this.getList();
  563. this.$modal.msgSuccess("删除成功");
  564. }).catch(() => {
  565. });
  566. },
  567. /** 导出按钮操作 */
  568. handleExport() {
  569. let str = 'enterprise';
  570. if (this.queryParams.type === "1") {
  571. str = "生鲜乳收购站";
  572. }
  573. if (this.queryParams.type === "2") {
  574. str = "屠宰企业";
  575. }
  576. if (this.queryParams.type === "3") {
  577. str = "饲料企业";
  578. }
  579. this.download('center-data/enterprise/export', {
  580. ...this.queryParams
  581. }, str+`_${format_date(new Date())}.xlsx`)
  582. },
  583. // 点击按钮修改是否只查询本级部门用户
  584. changeQueryType() {
  585. this.queryParams.deptName = this.queryParams.deptName == 0 ? 1 : 0;
  586. }
  587. }
  588. };
  589. </script>