Nzy.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. <template>
  2. <div class="page-nzy-manage">
  3. <div class="page-left" :style="{height:contentHeight+'px',width:contentWidth+'px'}">
  4. <div class="nzy-tools">
  5. <el-form label-width="120px" :model="searchParam">
  6. <el-row :gutter="10">
  7. <el-col :span="6">
  8. <el-form-item label="批次索引:">
  9. <el-input v-model="searchParam.pcbh" placeholder="请输入项目名称" clearable></el-input>
  10. </el-form-item>
  11. </el-col>
  12. <el-col :span="6">
  13. <el-form-item label="批次名称:">
  14. <el-input v-model="searchParam.pch" placeholder="请输入项目名称" clearable></el-input>
  15. </el-form-item>
  16. </el-col>
  17. <el-col :span="6">
  18. <el-form-item label="类型:">
  19. <el-select v-model="searchParam.lx" style="width: 100%;">
  20. <el-option value="单独选址" label="单独选址" />
  21. <el-option value="批次用地" label="批次用地" />
  22. </el-select>
  23. </el-form-item>
  24. </el-col>
  25. <el-col :span="6">
  26. <el-form-item label="批准文号:">
  27. <el-input v-model="searchParam.pwh" placeholder="请输入批准文号" clearable></el-input>
  28. </el-form-item>
  29. </el-col>
  30. </el-row>
  31. <el-row :gutter="10">
  32. <el-col :span="6">
  33. <el-form-item label="批准日期:">
  34. <el-date-picker
  35. v-model="pcrqDateRange"
  36. type="daterange"
  37. value-format="yyyy-MM-dd"
  38. unlink-panels
  39. start-placeholder="批准开始时间"
  40. end-placeholder="批准结束时间"
  41. :shortcuts="shortcuts"
  42. style="width:100%"
  43. />
  44. </el-form-item>
  45. </el-col>
  46. <el-col :span="6">
  47. <el-form-item label="批次总面积:">
  48. <el-input v-model="searchParam.pzmj" placeholder="请输入批次总面积(公顷)" clearable></el-input>
  49. </el-form-item>
  50. </el-col>
  51. <el-col :span="6">
  52. <el-form-item label="是否农民建房:">
  53. <el-select style="width: 100%;" v-model="searchParam.nmjf">
  54. <el-option value="是" label="是"></el-option>
  55. <el-option value="否" label="否"></el-option>
  56. </el-select>
  57. </el-form-item>
  58. </el-col>
  59. <el-col :span="6">
  60. <div class="btn-group">
  61. <el-button type="primary" @click="queryByPage">查询</el-button>
  62. <div class="panel-dropdown">
  63. <el-dropdown>
  64. <el-button type="success">
  65. 导入文件<i class="el-icon-arrow-down el-icon--right"></i>
  66. </el-button>
  67. <el-dropdown-menu slot="dropdown">
  68. <el-dropdown-item>
  69. <el-upload
  70. class="upload-demo"
  71. action=""
  72. :before-upload="beforeUpload"
  73. multiple
  74. :limit="3"
  75. :on-exceed="2"
  76. accept=".zip">
  77. &nbsp;&nbsp;批量导入&nbsp;&nbsp;
  78. </el-upload>
  79. </el-dropdown-item>
  80. </el-dropdown-menu>
  81. </el-dropdown>
  82. </div>
  83. </div>
  84. </el-col>
  85. </el-row>
  86. </el-form>
  87. </div>
  88. <div class="nzy-table">
  89. <el-table
  90. border
  91. :data="tableData.data"
  92. :height="contentHeight-260"
  93. :header-cell-style="tableHeaderStyle"
  94. :cell-style="tableRowStyle"
  95. ref="report-table"
  96. >
  97. <el-table-column
  98. type="index"
  99. width="80"
  100. label="序号">
  101. </el-table-column>
  102. <el-table-column
  103. prop="pch"
  104. label="批次名称">
  105. </el-table-column>
  106. <el-table-column
  107. prop="lx"
  108. label="类型">
  109. </el-table-column>
  110. <el-table-column
  111. prop="pwh"
  112. label="批准文号">
  113. </el-table-column>
  114. <el-table-column
  115. prop="pzrq"
  116. label="批准日期">
  117. </el-table-column>
  118. <el-table-column
  119. prop="pzmj"
  120. label="批准总面积(公顷)">
  121. </el-table-column>
  122. <el-table-column
  123. prop="nmjf"
  124. label="是否农民建房">
  125. </el-table-column>
  126. <el-table-column
  127. width="260"
  128. label="操作">
  129. <template slot-scope="scope">
  130. <div style="line-height: 34px;">
  131. <el-button
  132. @click.native.prevent="openDetail(scope.row)"
  133. plain
  134. type="primary"
  135. size="mini">
  136. 查看
  137. </el-button>
  138. <el-button
  139. @click.native.prevent="openDetail(scope.row, true)"
  140. style="margin: 0px 10px;"
  141. plain
  142. type="primary"
  143. size="mini">
  144. 编辑
  145. </el-button>
  146. <el-popconfirm
  147. title="该条数据确定删除吗?"
  148. @confirm="deleteHandle(scope.$index, scope.row)"
  149. >
  150. <el-button
  151. plain
  152. type="danger"
  153. slot="reference"
  154. size="mini">
  155. 删除
  156. </el-button>
  157. </el-popconfirm>
  158. </div>
  159. </template>
  160. </el-table-column>
  161. </el-table>
  162. <Page style="float: right;margin-top: 10px;"
  163. show-total
  164. :total="tableData.total"
  165. :page-size="searchParam.size"
  166. @on-change="pageChange"
  167. @on-page-size-change="sizeChange"
  168. show-sizer />
  169. </div>
  170. </div>
  171. <el-dialog
  172. :visible.sync="detailShow"
  173. title="项目详情"
  174. top="5vh"
  175. width="80%"
  176. >
  177. <detail ref="details" :contentWidth="contentWidth-menusWidth" :contentHeight="contentHeight"/>
  178. </el-dialog>
  179. </div>
  180. </template>
  181. <script>
  182. import Detail from "./nzy/Detail";
  183. import JSZip from 'jszip'
  184. import mapshaper from 'mapshaper';
  185. import { saveAs } from 'file-saver'
  186. const {
  187. exportFileContent
  188. } = mapshaper.internal
  189. export default {
  190. name: "Nzy",
  191. props:{
  192. contentWidth:Number,
  193. contentHeight:Number
  194. },
  195. components:{Detail},
  196. data() {
  197. return {
  198. menus:JSON.parse(window.sessionStorage.getItem('yzt-user')),
  199. menusWidth:700,
  200. detailShow:false,
  201. tableData:{
  202. data:[],
  203. },
  204. pcrqDateRange: [],
  205. searchParam: {
  206. pcbh: '',
  207. pch: '',
  208. lx: '',
  209. pwh: '',
  210. pzrqStart: '',
  211. pzrqEnd: '',
  212. pzmj: '',
  213. nmjf: '',
  214. current: 1,
  215. size: 10
  216. }
  217. }
  218. },
  219. created () {
  220. this.queryByPage();
  221. },
  222. methods: {
  223. pageChange:function (page){
  224. this.searchParam.current=page;
  225. this.queryByPage()
  226. },
  227. sizeChange:function (size){
  228. this.searchParam.size=size;
  229. this.queryByPage()
  230. },
  231. //查询报批项目信息
  232. queryByPage () {
  233. let _this = this;
  234. if (this.pcrqDateRange.length > 0) {
  235. this.searchParam.pzrqStart = this.pcrqDateRange[0]
  236. this.searchParam.pzrqEnd = this.pcrqDateRange[1]
  237. }
  238. const params = {
  239. ...this.searchParam
  240. }
  241. this.$ajax.get('/api/stnzy/page', params, this, true).then(res => {
  242. if (res.status === 200) {
  243. _this.tableData.data= res.records;
  244. _this.tableData.total = res.total;
  245. }
  246. })
  247. },
  248. openDetail(row, isEditor = false){
  249. this.detailShow = true;
  250. this.$nextTick(() => {
  251. this.$refs['details'].initDetailData(row, isEditor)
  252. })
  253. },
  254. deleteHandle (index, row) {
  255. const params = {pch: row['pch']}
  256. this.$ajax.get('/api/stnzy/deleteByPch', params, this, true).then(res => {
  257. if (res) {
  258. this.$Message.success('删除成功!')
  259. this.queryByPage()
  260. }
  261. })
  262. },
  263. tableRowStyle({row, rowIndex}) {
  264. if (rowIndex%2 === 1) {
  265. return 'text-align:center;background:#F7F8FA';
  266. }else{
  267. return 'text-align:center;';
  268. }
  269. },
  270. tableHeaderStyle(){
  271. return 'background:#E5EDFE; font-family:AlibabaPuHuiTiR; font-size:16px; color:rgba(51, 51, 51, 1);text-align:center;';
  272. },
  273. beforeUpload(file){
  274. if(file){
  275. if(file.name.endsWith("zip")){
  276. this.doInput(file)
  277. }
  278. return false;
  279. }
  280. },
  281. doInput(file){
  282. let params = new FormData();
  283. params.append("file",file);
  284. const loading = this.$loading({
  285. lock: true,
  286. text: '正在导入中',
  287. spinner: 'el-icon-loading',
  288. background: 'rgba(0, 0, 0, 0.7)'
  289. });
  290. this.$ajax.post('/api/stnzy/upload', params, this).then(res => {
  291. loading.close();
  292. if (res) {
  293. this.$Message.success("导入成功!")
  294. }
  295. })
  296. },
  297. saveDataset(dataset, type = 'shapefile') {
  298. const fileContent = exportFileContent(dataset, { format: type })
  299. this.saveFileContent(fileContent)
  300. },
  301. saveFileContent(fileContent) {
  302. var zip = new JSZip()
  303. fileContent.forEach(i => {
  304. zip.file(i.filename, i.content)
  305. })
  306. zip.file('农转用项目.cpg', 'UTF-8')
  307. zip.generateAsync({ type: 'blob' }, function updateCallback(metadata) {
  308. var msg = 'progression : ' + metadata.percent.toFixed(2) + ' %'
  309. if (metadata.currentFile) {
  310. msg += ', current file = ' + metadata.currentFile
  311. }
  312. console.log(msg)
  313. }).then((blob) => {
  314. // see FileSaver.js
  315. saveAs(blob, '农转用项目.zip')
  316. console.log('done !')
  317. })
  318. .catch(error => console.error(error.stack))
  319. },
  320. }
  321. }
  322. </script>
  323. <style scoped lang="scss">
  324. .page-nzy-manage{
  325. position: relative;
  326. display: flex;
  327. .page-left{
  328. background: #fff;
  329. border-radius: 0px 0px 0px 0px;
  330. z-index: 99;
  331. padding: 20px;
  332. border-right:2px solid #e9e3e3;
  333. .nzy-tools{
  334. .btn-group {
  335. display: flex;
  336. }
  337. .panel-dropdown{
  338. margin-left: 10px;
  339. border-radius: 4px 4px 4px 4px;
  340. .el-dropdown{
  341. width: 100%;
  342. }
  343. }
  344. }
  345. }
  346. .page-detail{
  347. background: #FFFFFF;
  348. border-radius: 0px 0px 0px 0px;
  349. position: absolute;
  350. z-index: 999;
  351. right: 0px;
  352. }
  353. .page-map{
  354. //position: absolute;
  355. //background:#434;
  356. }
  357. }
  358. </style>