管理系统PC端
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 

1186 Zeilen
49 KiB

  1. <template>
  2. <div class="app-container">
  3. <el-row :gutter="20">
  4. <splitpanes :horizontal="this.$store.getters.device === 'mobile'" class="default-theme">
  5. <!--部门数据-->
  6. <pane size="16">
  7. <el-col>
  8. <div class="head-container">
  9. <el-input v-model="deptName" placeholder="请输入区划名称" clearable size="small" prefix-icon="el-icon-search" style="margin-bottom: 20px" />
  10. </div>
  11. <div class="head-container container_main">
  12. <el-tree :data="deptOptions" :props="defaultProps" :expand-on-click-node="false" :filter-node-method="filterNode" ref="tree" node-key="id" default-expand-all highlight-current @node-click="handleNodeClick" />
  13. </div>
  14. </el-col>
  15. </pane>
  16. <!--用户数据-->
  17. <pane size="84">
  18. <el-col>
  19. <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
  20. <el-form-item label="地块代码" prop="dkbm">
  21. <el-input v-model="queryParams.dkbm" placeholder="请输入地块代码" clearable @keyup.enter.native="handleQuery"/>
  22. </el-form-item>
  23. <el-form-item label="地块名称" prop="dkmc">
  24. <el-input v-model="queryParams.dkmc" placeholder="请输入地块名称" clearable @keyup.enter.native="handleQuery"/>
  25. </el-form-item>
  26. <el-form-item label="权属性质" prop="syqxz">
  27. <el-select v-model="queryParams.syqxz" placeholder="请选择所有权性质" clearable>
  28. <el-option v-for="dict in dict.type.ownership_type" :key="dict.value" :label="dict.label" :value="dict.value"/>
  29. </el-select>
  30. </el-form-item>
  31. <el-form-item label="地块类别" prop="dklb">
  32. <el-select v-model="queryParams.dklb" placeholder="请选择地块类别" clearable>
  33. <el-option v-for="dict in dict.type.land_type" :key="dict.value" :label="dict.label" :value="dict.value"/>
  34. </el-select>
  35. </el-form-item>
  36. <el-form-item label="利用类型" prop="tdlylx">
  37. <el-select v-model="queryParams.tdlylx" placeholder="请选择土地利用类型" clearable>
  38. <el-option v-for="dict in dict.type.land_use" :key="dict.value" :label="dict.label" :value="dict.value"/>
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item label="地力等级" prop="dldj">
  42. <el-select v-model="queryParams.dldj" placeholder="请选择地力等级" clearable>
  43. <el-option v-for="dict in dict.type.land_grade_type" :key="dict.value" :label="dict.label" :value="dict.value"/>
  44. </el-select>
  45. </el-form-item>
  46. <el-form-item label="土地用途" prop="tdyt">
  47. <el-select v-model="queryParams.tdyt" placeholder="请选择土地用途" clearable>
  48. <el-option v-for="dict in dict.type.land_use_type" :key="dict.value" :label="dict.label" :value="dict.value"/>
  49. </el-select>
  50. </el-form-item>
  51. <el-form-item label="基本农田" prop="sfjbnt">
  52. <el-select v-model="queryParams.sfjbnt" placeholder="请选择是否基本农田" clearable>
  53. <el-option v-for="dict in dict.type.is_common" :key="dict.value" :label="dict.label" :value="dict.value"/>
  54. </el-select>
  55. </el-form-item>
  56. <!--<el-form-item label="是账外地" prop="sfzwd">
  57. <el-select v-model="queryParams.sfzwd" placeholder="请选择是否账外地" clearable>
  58. <el-option v-for="dict in dict.type.is_common" :key="dict.value" :label="dict.label" :value="dict.value"/>
  59. </el-select>
  60. </el-form-item>-->
  61. <el-form-item label="调查状态" prop="surveyStatus">
  62. <el-select v-model="queryParams.surveyStatus" placeholder="请选择调查状态" clearable>
  63. <el-option v-for="dict in dict.type.survey_status" :key="dict.value" :label="dict.label" :value="dict.value"/>
  64. </el-select>
  65. </el-form-item>
  66. <el-form-item>
  67. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  68. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  69. </el-form-item>
  70. </el-form>
  71. <el-row :gutter="10" class="mb8">
  72. <el-col :span="1.5">
  73. <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['resource:land:add']">新增</el-button>
  74. </el-col>
  75. <!--
  76. <el-col :span="1.5">
  77. <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate" v-hasPermi="['resource:land:edit']">修改</el-button>
  78. </el-col>
  79. <el-col :span="1.5">
  80. <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['resource:land:remove']">删除</el-button>
  81. </el-col>
  82. -->
  83. <el-col :span="1.5">
  84. <el-button type="success" plain icon="el-icon-upload2" size="mini" @click="handleImport" v-hasPermi="['resource:land:import']">导入</el-button>
  85. </el-col>
  86. <el-col :span="1.5">
  87. <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['resource:land:export']">导出</el-button>
  88. </el-col>
  89. <el-col :span="1.5">
  90. <el-button type="info" plain icon="el-icon-printer" size="mini" @click="handlePrint()" v-hasPermi="['resource:land:print']">打印</el-button>
  91. </el-col>
  92. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  93. </el-row>
  94. <!-- 数据列表 列属性 min-width="60" show-overflow-tooltip @selection-change="handleSelectionChange" -->
  95. <el-table v-loading="loading" :data="landList" border>
  96. <!--<el-table-column type="selection" width="55" align="center" />
  97. <el-table-column label="fid " align="center" prop="fid" min-width="60"/>-->
  98. <el-table-column label="地块代码" align="center" prop="dkbm" min-width="180" show-overflow-tooltip />
  99. <el-table-column label="地块名称" align="left" prop="dkmc" min-width="120" show-overflow-tooltip />
  100. <!-- <el-table-column label="所有权性质" align="center" prop="syqxz">
  101. <template slot-scope="scope">
  102. <dict-tag :options="dict.type.ownership_type" :value="scope.row.syqxz"/>
  103. </template>
  104. </el-table-column>-->
  105. <el-table-column label="地块类别" align="center" prop="dklb" min-width="80" show-overflow-tooltip>
  106. <template slot-scope="scope">
  107. <dict-tag :options="dict.type.land_type" :value="scope.row.dklb"/>
  108. </template>
  109. </el-table-column>
  110. <!--<el-table-column label="土地利用类型" align="center" prop="tdlylx">
  111. <template slot-scope="scope">
  112. <dict-tag :options="dict.type.land_use" :value="scope.row.tdlylx"/>
  113. </template>
  114. </el-table-column>
  115. <el-table-column label="地力等级" align="center" prop="dldj">
  116. <template slot-scope="scope">
  117. <dict-tag :options="dict.type.land_grade_type" :value="scope.row.dldj"/>
  118. </template>
  119. </el-table-column>
  120. <el-table-column label="土地用途" align="center" prop="tdyt">
  121. <template slot-scope="scope">
  122. <dict-tag :options="dict.type.land_use_type" :value="scope.row.tdyt"/>
  123. </template>
  124. </el-table-column>
  125. <el-table-column label="是否基本农田" align="center" prop="sfjbnt">
  126. <template slot-scope="scope">
  127. <dict-tag :options="dict.type.is_common" :value="scope.row.sfjbnt"/>
  128. </template>
  129. </el-table-column>-->
  130. <el-table-column label="地块四至" align="center">
  131. <el-table-column label="地块东至" align="left" prop="dkdz" min-width="100" show-overflow-tooltip />
  132. <el-table-column label="地块西至" align="left" prop="dkxz" min-width="100" show-overflow-tooltip />
  133. <el-table-column label="地块南至" align="left" prop="dknz" min-width="100" show-overflow-tooltip />
  134. <el-table-column label="地块北至" align="left" prop="dkbz" min-width="100" show-overflow-tooltip />
  135. </el-table-column>
  136. <!--<el-table-column label="备注信息" align="center" prop="dkbzxx" />
  137. <el-table-column label="指界人姓名" align="center" prop="zjrxm" />
  138. <el-table-column label="图显面积 " align="center" prop="txmj" />-->
  139. <el-table-column label="实测面积" align="center" prop="scmjm" min-width="80" show-overflow-tooltip/>
  140. <el-table-column label="调查状态" align="center" prop="surveyStatus" min-width="80" show-overflow-tooltip>
  141. <template slot-scope="scope">
  142. <dict-tag :options="dict.type.survey_status" :value="scope.row.surveyStatus"/>
  143. </template>
  144. </el-table-column>
  145. <!--<el-table-column label="部门级联代码" align="center" prop="importCode" />
  146. <el-table-column label="区域位置名称" align="center" prop="deptName" />-->
  147. <el-table-column label="操作" align="center" class-name="small-padding fixed-width" min-width="170">
  148. <template slot-scope="scope">
  149. <el-button size="mini" type="text" icon="el-icon-view" @click="handleLook(scope.row)" v-hasPermi="['resource:land:query']">查看</el-button>
  150. <el-button size="mini" type="text" icon="el-icon-s-promotion" @click="handleMap(scope.row)" v-hasPermi="['resource:land:map']">地图</el-button>
  151. <el-dropdown size="mini" v-hasPermi="['resource:land:remove']">
  152. <el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button>
  153. <el-dropdown-menu slot="dropdown" style="padding: 5px">
  154. <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['resource:land:edit']">修改</el-button>
  155. <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['resource:land:remove']">删除</el-button>
  156. </el-dropdown-menu>
  157. </el-dropdown>
  158. </template>
  159. </el-table-column>
  160. </el-table>
  161. <!-- 分页插件 -->
  162. <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList"/>
  163. </el-col>
  164. </pane>
  165. </splitpanes>
  166. </el-row>
  167. <!-- 导入EXCEL组件 -->
  168. <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
  169. <el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
  170. <i class="el-icon-upload"></i>
  171. <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
  172. <div class="el-upload__tip text-left" slot="tip">
  173. <div class="el-upload__tip" slot="tip">
  174. <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的地块属性
  175. </div>
  176. <p style="color: red">1、仅允许导入xls、xlsx格式文件;</p>
  177. <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate">下载模板</el-link>
  178. </div>
  179. </el-upload>
  180. <div slot="footer" class="dialog-footer">
  181. <el-button type="primary" @click="submitFileForm">确 定</el-button>
  182. <el-button @click="upload.open = false">取 消</el-button>
  183. </div>
  184. </el-dialog>
  185. <!-- 查看地块属性对话框 -->
  186. <el-dialog :title="title" :visible.sync="viewOpen" width="800px" append-to-body>
  187. <el-descriptions title="地块信息" border :column="2" class="margin-top">
  188. <el-descriptions-item label="区域位置名称">{{ form.deptName }}</el-descriptions-item>
  189. <el-descriptions-item label="标识码">{{ form.bsm }}</el-descriptions-item>
  190. <el-descriptions-item label="要素代码">{{ form.ysdm }}</el-descriptions-item>
  191. <el-descriptions-item label="地块代码">{{ form.dkbm }}</el-descriptions-item>
  192. <el-descriptions-item label="地块名称">{{ form.dkmc }}</el-descriptions-item>
  193. <el-descriptions-item label="所有权性质">{{ form.syqxz }}</el-descriptions-item>
  194. <el-descriptions-item label="地块类别">{{ form.dklb }}</el-descriptions-item>
  195. <el-descriptions-item label="土地利用类型">{{ form.tdlylx }}</el-descriptions-item>
  196. <el-descriptions-item label="地力等级">{{ form.dldj }}</el-descriptions-item>
  197. <el-descriptions-item label="土地用途">{{ form.tdyt }}</el-descriptions-item>
  198. <el-descriptions-item label="是否基本农田">{{ form.sfjbnt }}</el-descriptions-item>
  199. <el-descriptions-item label="地块东至">{{ form.dkdz }}</el-descriptions-item>
  200. <el-descriptions-item label="地块西至">{{ form.dkxz }}</el-descriptions-item>
  201. <el-descriptions-item label="地块南至">{{ form.dknz }}</el-descriptions-item>
  202. <el-descriptions-item label="地块北至">{{ form.dkbz }}</el-descriptions-item>
  203. <el-descriptions-item label="备注信息">{{ form.dkbzxx }}</el-descriptions-item>
  204. <el-descriptions-item label="指界人姓名">{{ form.zjrxm }}</el-descriptions-item>
  205. <el-descriptions-item label="图显面积">{{ form.txmj }}</el-descriptions-item>
  206. <el-descriptions-item label="实测面积">{{ form.scmjm }}</el-descriptions-item>
  207. <el-descriptions-item label="是否账外地">{{ form.sfzwd }}</el-descriptions-item>
  208. </el-descriptions>
  209. <el-descriptions title="经营数据" border :column="2" class="margin-top">
  210. <el-descriptions-item label="经营面积(亩)">{{ form.jymj }}</el-descriptions-item>
  211. <el-descriptions-item label="经营方式">{{ form.jyfs }}</el-descriptions-item>
  212. <el-descriptions-item label="经营对象名称">{{ form.jydxmc }}</el-descriptions-item>
  213. <el-descriptions-item label="经营开始时间">{{ form.jykssj }}</el-descriptions-item>
  214. <el-descriptions-item label="经营结束时间">{{ form.jyjssj }}</el-descriptions-item>
  215. <el-descriptions-item label="承包金额(元)">{{ form.cbje }}</el-descriptions-item>
  216. <el-descriptions-item label="备注">{{ form.bz }}</el-descriptions-item>
  217. <el-descriptions-item label="调查状态">{{ form.surveyStatus }}</el-descriptions-item>
  218. <el-descriptions-item label="实物图">
  219. <div v-if="!!form.dkImg">
  220. <el-tooltip effect="light" :content="item" placement="bottom" v-for="(item, index) in form.dkImg.split(',')" :key="index">
  221. <el-image style="height: 64px; width: 64px; margin: 2px; display: inline-block;" fit="scale-down" :src="this.baseRoutingUrll + item" :preview-src-list="form.dkImg.split(',').map((x) => this.baseRoutingUrll + x)"/>
  222. </el-tooltip>
  223. </div>
  224. </el-descriptions-item>
  225. </el-descriptions>
  226. <!-- 弹框操作按钮 -->
  227. <div slot="footer" class="dialog-footer">
  228. <el-button @click="doPrint">打 印</el-button>
  229. <el-button @click="cancelDetail">关 闭</el-button>
  230. </div>
  231. </el-dialog>
  232. <!-- 添加或修改地块属性对话框 -->
  233. <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
  234. <el-form ref="form" :model="form" :rules="rules" :inline="true" label-width="120px">
  235. <el-form-item label="区域位置" prop="deptName">
  236. <el-input v-model="form.deptName" placeholder="请输入区域位置名称" show-word-limit :maxlength="100"/>
  237. </el-form-item>
  238. <el-form-item label="地块代码" prop="dkbm">
  239. <el-input v-model="form.dkbm" placeholder="地块代码不输入时,系统自动分配" show-word-limit :maxlength="19"/>
  240. </el-form-item>
  241. <el-form-item label="地块名称" prop="dkmc">
  242. <el-input v-model="form.dkmc" placeholder="请输入地块名称" show-word-limit :maxlength="50"/>
  243. </el-form-item>
  244. <el-form-item label="所有权性质" prop="syqxz">
  245. <el-select v-model="form.syqxz" placeholder="请选择所有权性质">
  246. <el-option v-for="dict in dict.type.ownership_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
  247. </el-select>
  248. </el-form-item>
  249. <el-form-item label="地块类别" prop="dklb">
  250. <el-select v-model="form.dklb" placeholder="请选择地块类别">
  251. <el-option v-for="dict in dict.type.land_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
  252. </el-select>
  253. </el-form-item>
  254. <el-form-item label="土地利用类型" prop="tdlylx">
  255. <el-select v-model="form.tdlylx" placeholder="请选择土地利用类型">
  256. <el-option v-for="dict in dict.type.land_use" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
  257. </el-select>
  258. </el-form-item>
  259. <el-form-item label="地力等级" prop="dldj">
  260. <el-select v-model="form.dldj" placeholder="请选择地力等级">
  261. <el-option v-for="dict in dict.type.land_grade_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
  262. </el-select>
  263. </el-form-item>
  264. <el-form-item label="土地用途" prop="tdyt">
  265. <el-select v-model="form.tdyt" placeholder="请选择土地用途">
  266. <el-option v-for="dict in dict.type.land_use_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
  267. </el-select>
  268. </el-form-item>
  269. <el-form-item label="是否基本农田" prop="sfjbnt">
  270. <el-radio-group v-model="form.sfjbnt">
  271. <el-radio v-for="dict in dict.type.is_common" :key="dict.value" :label="dict.value">{{dict.label}}</el-radio>
  272. </el-radio-group>
  273. </el-form-item>
  274. <el-form-item label="地块东至" prop="dkdz">
  275. <el-input v-model="form.dkdz" placeholder="请输入地块东至" show-word-limit :maxlength="50"/>
  276. </el-form-item>
  277. <el-form-item label="地块西至" prop="dkxz">
  278. <el-input v-model="form.dkxz" placeholder="请输入地块西至" show-word-limit :maxlength="50"/>
  279. </el-form-item>
  280. <el-form-item label="地块南至" prop="dknz">
  281. <el-input v-model="form.dknz" placeholder="请输入地块南至" show-word-limit :maxlength="50"/>
  282. </el-form-item>
  283. <el-form-item label="地块北至" prop="dkbz">
  284. <el-input v-model="form.dkbz" placeholder="请输入地块北至" show-word-limit :maxlength="50"/>
  285. </el-form-item>
  286. <el-form-item label="备注信息" prop="dkbzxx">
  287. <el-input v-model="form.dkbzxx" placeholder="请输入备注信息" show-word-limit :maxlength="254"/>
  288. </el-form-item>
  289. <el-form-item label="指界人姓名" prop="zjrxm">
  290. <el-input v-model="form.zjrxm" placeholder="请输入指界人姓名" show-word-limit :maxlength="100"/>
  291. </el-form-item>
  292. <el-form-item label="图显面积" prop="txmj">
  293. <el-input-number v-model="form.txmj" placeholder="请输入图显面积" controls-position="right" :precision="2"/>
  294. </el-form-item>
  295. <el-form-item label="实测面积" prop="scmjm">
  296. <el-input-number v-model="form.scmjm" placeholder="请输入实测面积" controls-position="right" :precision="3"/>
  297. </el-form-item>
  298. <el-form-item label="是否账外地" prop="sfzwd">
  299. <el-radio-group v-model="form.sfzwd">
  300. <el-radio v-for="dict in dict.type.is_common" :key="dict.value" :label="dict.value">{{dict.label}}</el-radio>
  301. </el-radio-group>
  302. </el-form-item>
  303. <el-form-item label="调查状态" prop="surveyStatus">
  304. <el-radio-group v-model="form.surveyStatus">
  305. <el-radio v-for="dict in dict.type.survey_status" :key="dict.value" :label="dict.value">{{dict.label}}</el-radio>
  306. </el-radio-group>
  307. </el-form-item>
  308. </el-form>
  309. <div slot="footer" class="dialog-footer">
  310. <el-button type="primary" @click="submitForm">确 定</el-button>
  311. <el-button @click="cancel">取 消</el-button>
  312. </div>
  313. </el-dialog>
  314. <!-- 地图对话框 -->
  315. <el-dialog :title="title" :visible.sync="openMap" width="1200px" append-to-body>
  316. <el-divider><h3 class="header-anchor">地图信息:绿色地块表示该地块,青色表示本组织已标记的其他地块</h3></el-divider>
  317. <div id="full-screen-acceptance" style="width: 100%;height:65vh;">
  318. <!--<div id="landMapDiv"></div>-->
  319. <div id="mapWrap"></div>
  320. <div id='land-btn-wrap'>
  321. <el-row>
  322. <input id="drawPolygon" class="ant-btn ant-btn-red" type="button" value="画图"/>&nbsp;&nbsp;
  323. <!-- <input id="drawRemove" type="button" class="ant-btn ant-btn-red" value="取消画图"/>&nbsp;&nbsp; -->
  324. <input id="drawReset" type="button" class="ant-btn ant-btn-red" value="还原"/>
  325. </el-row>
  326. </div>
  327. </div>
  328. <div slot="footer" class="dialog-footer">
  329. <el-button type="primary" v-if="diglogStatus" @click="submitFormMap">确 定</el-button>
  330. <el-button type="danger" @click="clearMapLayer">清除图层</el-button>
  331. <el-button @click="cancelMap">关 闭</el-button>
  332. </div>
  333. </el-dialog>
  334. </div>
  335. </template>
  336. <script>
  337. import { listLand, listLandQuery,getLand, getLandDetail, getLandDetailByDkbm, delLand, addLand, updateLand, printLand } from "@/api/resource/land"
  338. import { areaSavePri, cleanSavePri } from "@/api/gis/map"
  339. import { getToken } from "@/utils/auth"
  340. import Treeselect from "@riophae/vue-treeselect";
  341. import { Splitpanes, Pane } from "splitpanes"
  342. import "@riophae/vue-treeselect/dist/vue-treeselect.css"
  343. import "splitpanes/dist/splitpanes.css"
  344. import { deptTreeSelect } from "@/api/system/user"
  345. import {getConfigKey} from "@/api/system/config";
  346. import {getDept,getInfoByImportCode} from "@/api/system/dept";
  347. import MapField from "@/components/house/MapField";
  348. import $ from "jquery";
  349. export default {
  350. name: "Land",
  351. dicts: ['ownership_type', 'land_use_type', 'survey_status', 'is_common', 'land_grade_type', 'land_type', 'land_use'],
  352. components: { Treeselect, Splitpanes, Pane,MapField },
  353. data() {
  354. return {
  355. // 遮罩层
  356. loading: true,
  357. // 导出遮罩层
  358. exportLoading: false,
  359. // 选中数组
  360. ids: [],
  361. // 非单个禁用
  362. single: true,
  363. // 非多个禁用
  364. multiple: true,
  365. // 显示搜索条件
  366. showSearch: true,
  367. // 总条数
  368. total: 0,
  369. // 地块属性表格数据
  370. landList: [],
  371. // 弹出层标题
  372. title: "",
  373. // 是否显示弹出层
  374. open: false,
  375. // 详情组件列数
  376. descColumn: 2,
  377. // 详情组件Label所占百分比, 最大={100 / descColumn}. 内容所占百分比={100 / descColumn - descLabelWidth}
  378. descLabelWidth: 15,
  379. // 对话框显示只读的详情
  380. viewOpen: false,
  381. // 项目路径
  382. baseRoutingUrll: process.env.VUE_APP_BASE_API,
  383. // 所有部门树选项
  384. deptOptions: undefined,
  385. // 过滤掉已禁用部门树选项
  386. enabledDeptOptions: undefined,
  387. // 筛选部门名称
  388. deptName: undefined,
  389. // 选中的部门
  390. selectDeptName: null,
  391. defaultProps: {
  392. children: "children",
  393. label: "label"
  394. },
  395. // 遮罩按钮新增点击状态
  396. diglogStatus: true,
  397. //地图
  398. openMap: false,
  399. mapTheGeomId: null,
  400. mapTheGeom: null,
  401. drawInsert:null,
  402. tGeoOrganizationLng: null,
  403. tGeoOrganizationLat: null,
  404. // 查询参数
  405. queryParams: {
  406. pageNum: 1,
  407. pageSize: 10,
  408. // 查询排序
  409. //orderByColumn: "id",
  410. //isAsc: "desc",
  411. // 翻译字典
  412. //toTranslateDict: "1",
  413. dkbm: null,
  414. dkmc: null,
  415. syqxz: null,
  416. dklb: null,
  417. tdlylx: null,
  418. dldj: null,
  419. tdyt: null,
  420. sfjbnt: null,
  421. surveyStatus: null,
  422. importCode: null,
  423. sfzwd: null,
  424. },
  425. // 表单参数
  426. form: {},
  427. // 表单校验
  428. rules: {
  429. dkmc: [
  430. { required: true, message: "地块名称不能为空", trigger: "blur" }
  431. ],
  432. scmjm: [
  433. { required: true, message: "实测面积不能为空", trigger: "blur" }
  434. ],
  435. },
  436. // EXCEL导入
  437. upload: {
  438. // 是否显示弹出层(用户导入)
  439. open: false,
  440. // 弹出层标题(用户导入)
  441. title: "",
  442. // 是否禁用上传
  443. isUploading: false,
  444. // 是否更新已经存在的用户数据
  445. updateSupport: 0,
  446. // 设置上传的请求头部
  447. headers: { Authorization: "Bearer " + getToken() },
  448. // 上传的地址
  449. url: process.env.VUE_APP_BASE_API + "/resource/land/importData"
  450. },
  451. }
  452. },
  453. watch: {
  454. // 根据名称筛选部门树
  455. deptName(val) {
  456. this.$refs.tree.filter(val)
  457. }
  458. },
  459. created() {
  460. this.getDeptTree()
  461. this.getList()
  462. // 获取geoserver的地址
  463. this.getGeoServerUrl();
  464. // 获取地块图层名称
  465. this.getLandLayerName();
  466. // 获取村边界的图层名称
  467. this.getVillageBorderLayerName();
  468. // 获取当前部门的位置
  469. // this.getCurrentDeptLocation();
  470. },
  471. methods: {
  472. /** 查询地块属性列表 */
  473. getList() {
  474. this.loading = true
  475. listLand(this.queryParams).then(response => {
  476. this.landList = response.rows
  477. this.total = response.total
  478. this.loading = false
  479. })
  480. },
  481. // 取消按钮
  482. cancel() {
  483. this.open = false
  484. this.reset()
  485. },
  486. // 取消按钮
  487. cancelMap() {
  488. this.openMap = false;
  489. this.reset();
  490. },
  491. cancelDetail() {
  492. this.viewOpen = false
  493. },
  494. // 表单重置
  495. reset() {
  496. this.form = {
  497. bsm: null,
  498. ysdm: '211011',
  499. dkbm: null,
  500. dkmc: null,
  501. syqxz: '30',
  502. dklb: '22',
  503. tdlylx: '011',
  504. dldj: '01',
  505. tdyt: '1',
  506. sfjbnt: '1',
  507. dkdz: null,
  508. dkxz: null,
  509. dknz: null,
  510. dkbz: null,
  511. dkbzxx: null,
  512. zjrxm: null,
  513. txmj: null,
  514. scmjm: null,
  515. theGeom: null,
  516. surveyStatus: '1',
  517. importCode: null,
  518. deptName: null,
  519. sfzwd: '2'
  520. }
  521. this.diglogStatus = true;
  522. this.resetForm("form")
  523. },
  524. /** 搜索按钮操作 */
  525. handleQuery() {
  526. this.queryParams.pageNum = 1
  527. this.getList()
  528. },
  529. /** 重置按钮操作 */
  530. resetQuery() {
  531. this.resetForm("queryForm")
  532. this.handleQuery()
  533. },
  534. // 多选框选中数据
  535. handleSelectionChange(selection) {
  536. this.ids = selection.map(item => item.fid)
  537. this.single = selection.length!==1
  538. this.multiple = !selection.length
  539. },
  540. /** 新增按钮操作 */
  541. handleAdd() {
  542. if(this.selectDeptName == null || this.selectDeptName == ''){
  543. this.$modal.msgWarning("请先选择村/组行政区划!")
  544. return
  545. }
  546. this.reset()
  547. this.form.deptId = this.queryParams.deptId;
  548. this.form.deptName = this.selectDeptName;
  549. this.open = true
  550. this.title = "添加地块属性"
  551. },
  552. /** 修改按钮操作 */
  553. handleUpdate(row) {
  554. this.reset()
  555. const fid = row.fid || this.ids
  556. getLand(fid).then(response => {
  557. this.form = response.data
  558. this.open = true
  559. this.title = "修改地块属性"
  560. })
  561. },
  562. /** 查看按钮操作 */
  563. handleLook(row) {
  564. getLandDetailByDkbm(row.dkbm).then(response => {
  565. this.form = response.data;
  566. this.viewOpen = true;
  567. this.title = "查看地块属性";
  568. });
  569. },
  570. /** 提交按钮 */
  571. submitForm() {
  572. this.$refs["form"].validate(valid => {
  573. if (valid) {
  574. if (this.form.fid != null) {
  575. updateLand(this.form).then(response => {
  576. this.$modal.msgSuccess("修改成功")
  577. this.open = false
  578. this.getList()
  579. })
  580. } else {
  581. addLand(this.form).then(response => {
  582. this.$modal.msgSuccess("新增成功")
  583. this.open = false
  584. this.getList()
  585. })
  586. }
  587. }
  588. })
  589. },
  590. /** 删除按钮操作 */
  591. handleDelete(row) {
  592. const fids = row.fid || this.ids
  593. this.$modal.confirm('是否确认删除地块属性编号为"' + fids + '"的数据项?').then(function() {
  594. return delLand(fids)
  595. }).then(() => {
  596. this.getList()
  597. this.$modal.msgSuccess("删除成功")
  598. }).catch(() => {})
  599. },
  600. /** 导出按钮操作 */
  601. handleExport() {
  602. this.download('resource/land/export', {
  603. ...this.queryParams
  604. }, `地块属性_${new Date().getTime()}.xlsx`)
  605. },
  606. /** 打印表单 */
  607. doPrint() {
  608. const originalTitle = document.title;
  609. try {
  610. document.title = this.title || '打印详情';
  611. const printElement = document.getElementById('printDetail');
  612. const printFrame = document.createElement('iframe');
  613. printFrame.style.position = 'absolute';
  614. printFrame.style.width = '0';
  615. printFrame.style.height = '0';
  616. printFrame.style.border = 'none';
  617. printFrame.style.left = '-9999px';
  618. printFrame.onload = function() {
  619. try {
  620. const frameDoc = printFrame.contentDocument || printFrame.contentWindow.document;
  621. const contentClone = printElement.cloneNode(true);
  622. const style = document.createElement('style');
  623. style.innerHTML = `
  624. @page {
  625. size: auto;
  626. margin: 10mm;
  627. }
  628. body {
  629. font-family: Arial, sans-serif;
  630. line-height: 1.5;
  631. margin: 0;
  632. padding: 0;
  633. }
  634. .el-descriptions {
  635. width: 100% !important;
  636. }
  637. .el-descriptions-item__label {
  638. width: ${this.descLabelWidth}% !important;
  639. }
  640. .el-descriptions-item__content {
  641. width: ${(100 / this.descColumn) - this.descLabelWidth}% !important;
  642. }
  643. /* 确保图片在打印时显示完整 */
  644. img, .el-image {
  645. max-width: 100% !important;
  646. height: auto !important;
  647. }
  648. `;
  649. frameDoc.head.appendChild(style);
  650. frameDoc.body.appendChild(contentClone);
  651. setTimeout(() => {
  652. printFrame.contentWindow.focus();
  653. printFrame.contentWindow.print();
  654. setTimeout(() => {
  655. document.body.removeChild(printFrame);
  656. document.title = originalTitle;
  657. }, 1000);
  658. }, 500);
  659. } catch (e) {
  660. document.body.removeChild(printFrame);
  661. document.title = originalTitle;
  662. this.$message.error('打印过程中发生错误');
  663. }
  664. };
  665. document.body.appendChild(printFrame);
  666. } catch (e) {
  667. document.title = originalTitle;
  668. this.$message.error('打印过程中发生错误');
  669. }
  670. },
  671. /** 打印按钮操作 */
  672. handlePrint() {
  673. printLand(this.queryParams).then(response => {})
  674. },
  675. /* 导入EXCEL组件 */
  676. handleImport() {
  677. this.upload.title = "地块属性导入"
  678. this.upload.open = true
  679. },
  680. /** 下载模板操作 */
  681. importTemplate() {
  682. this.download('resource/land/importTemplate', {
  683. }, `地块属性_template.xlsx`)
  684. },
  685. // 文件上传中处理
  686. handleFileUploadProgress(event, file, fileList) {
  687. this.upload.isUploading = true
  688. },
  689. // 文件上传成功处理
  690. handleFileSuccess(response, file, fileList) {
  691. this.upload.open = false
  692. this.upload.isUploading = false
  693. this.$refs.upload.clearFiles()
  694. this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true })
  695. this.getList()
  696. },
  697. // 提交上传文件
  698. submitFileForm() {
  699. this.$refs.upload.submit()
  700. },
  701. /** 查询部门下拉树结构 */
  702. getDeptTree() {
  703. deptTreeSelect().then(response => {
  704. this.deptOptions = response.data
  705. this.enabledDeptOptions = this.filterDisabledDept(JSON.parse(JSON.stringify(response.data)))
  706. })
  707. },
  708. // 过滤禁用的部门
  709. filterDisabledDept(deptList) {
  710. return deptList.filter(dept => {
  711. if (dept.disabled) {
  712. return false
  713. }
  714. if (dept.children && dept.children.length) {
  715. dept.children = this.filterDisabledDept(dept.children)
  716. }
  717. return true
  718. })
  719. },
  720. // 筛选节点
  721. filterNode(value, data) {
  722. if (!value) return true
  723. return data.label.indexOf(value) !== -1
  724. },
  725. // 节点单击事件
  726. handleNodeClick(data) {
  727. this.queryParams.deptId = data.id
  728. this.selectDeptName = data.label
  729. this.handleQuery()
  730. },
  731. // 获取geoserver的地址
  732. getGeoServerUrl() {
  733. getConfigKey("system.geoServer.url").then(response => {
  734. this.mapGeoServerUrl = response.msg;
  735. });
  736. },
  737. // 获取地块图层名称
  738. getLandLayerName() {
  739. getConfigKey("geoserver.layer.dk").then(response => {
  740. this.landLayerName = response.msg;
  741. });
  742. },
  743. // 获取村边界的图层名称
  744. getVillageBorderLayerName() {
  745. getConfigKey("geoserver.layer.villageBorder").then(response => {
  746. this.villageBorderLayerName = response.msg;
  747. });
  748. },
  749. // 获取当前部门的位置
  750. getCurrentDeptLocation() {
  751. var deptId = this.queryParams.deptId;
  752. if(deptId){
  753. deptId = 100;
  754. }
  755. getDept(deptId).then(response => {
  756. let insertCode = response.data;
  757. if (insertCode != null) {
  758. this.tGeoOrganizationLat = insertCode.latitude;
  759. this.tGeoOrganizationLng = insertCode.longitude;
  760. }
  761. });
  762. },
  763. /** 地图修改按钮操作 */
  764. handleMap(row) {
  765. this.mapTheGeomId = row;
  766. getLandDetail(row.fid).then((res) => {
  767. getInfoByImportCode(row.importCode).then((res) => {
  768. let insertCode = res.data;
  769. if (insertCode != null) {
  770. this.tGeoOrganizationLat = insertCode.latitude;
  771. this.tGeoOrganizationLng = insertCode.longitude;
  772. }
  773. const tableRow = { importCode: row.importCode };
  774. listLandQuery(tableRow).then(response => {
  775. this.openMap = true;
  776. this.title = "修改地图";
  777. setTimeout(() => {
  778. this.pointDarw(response.rows);
  779. }, 500);
  780. });
  781. });
  782. });
  783. },
  784. /** 地图提交按钮 */
  785. submitFormMap() {
  786. this.diglogStatus = false;
  787. if(this.drawInsert !=null && this.drawInsert !=""){
  788. this.mapTheGeomId.theGeom = JSON.stringify(this.drawInsert);
  789. }
  790. let sysGis = { tableName: 't_resource_land',priId: 'fid',id: this.mapTheGeomId.fid,theGeom: this.mapTheGeomId.theGeom };
  791. if (this.mapTheGeomId != null) {
  792. areaSavePri(sysGis).then(response => {
  793. this.$modal.msgSuccess("修改成功");
  794. this.openMap = false;
  795. this.getList();
  796. this.diglogStatus = true;
  797. });
  798. }
  799. },
  800. /** 清除坐标点图层 */
  801. clearMapLayer() {
  802. let sysGis = { tableName: 't_resource_land',priId: 'fid',id: this.mapTheGeomId.fid};
  803. cleanSavePri(sysGis).then(response => {
  804. this.$modal.msgSuccess("清除成功");
  805. this.openMap = false;
  806. this.getList();
  807. });
  808. },
  809. pointDarw(resourceList) {
  810. //加载地图编辑
  811. var that = this;
  812. var map;
  813. //var hc_land;
  814. var draw; // global so we can remove it later
  815. var vector_drawing;
  816. var startDarw =false;
  817. var openDarw = false;
  818. this.mapTheGeomId = resourceList.find((land) => {
  819. //model就是上面的数据源
  820. return land.fid === this.mapTheGeomId.fid; //筛选出匹配数据
  821. });
  822. if (this.mapTheGeomId.theGeom != null && this.mapTheGeomId.theGeom != ""
  823. && this.mapTheGeomId.theGeom != undefined) {
  824. startDarw = true;
  825. openDarw = false;
  826. } else {
  827. startDarw = false;
  828. openDarw = true;
  829. }
  830. if (startDarw) {
  831. document.getElementById("mapWrap").innerHTML = '';
  832. var hc_land;
  833. var draw; // global so we can remove it later
  834. var vector_drawing;
  835. var projection = new ol.proj.Projection({
  836. //地图投影类型
  837. code: "EPSG:3857",
  838. units: "degrees",
  839. //extent:extent
  840. });
  841. var aerial = new ol.layer.Tile({
  842. source: new ol.source.XYZ({
  843. url: "http://t0.tianditu.gov.cn/img_w/wmts?" +
  844. "SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles" +
  845. "&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=cc4aba6e967096098249efa069733067",
  846. }),
  847. isGroup: true,
  848. name: "卫星影像图",
  849. });
  850. var yingxzi = new ol.layer.Tile({
  851. source: new ol.source.XYZ({
  852. url: "https://t0.tianditu.gov.cn/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=cc4aba6e967096098249efa069733067",
  853. }),
  854. isGroup: true,
  855. name: "天地图文字标注--卫星影像图",
  856. });
  857. //加载地图
  858. map = new ol.Map({
  859. controls: ol.control.defaults({attribution: false, zoom: false, rotate: false}).extend([]), //隐藏放大缩小按钮
  860. layers: [aerial, yingxzi],
  861. projection: projection,
  862. target: "mapWrap",
  863. view: new ol.View({
  864. //center: ol.proj.fromLonLat([115.452752, 31.789033]),
  865. zoom: 17.8,
  866. minZoom: 0, //地图缩小限制
  867. maxZoom: 18.3, //地图放大限制
  868. }),
  869. });
  870. // 添加村边界
  871. let mapBorder = new ol.layer.Image({
  872. source: new ol.source.ImageWMS({
  873. url: this.mapGeoServerUrl + '/wms',
  874. params: {
  875. LAYERS: this.villageBorderLayerName,
  876. cql_filter: "import_code = '" + this.mapTheGeomId.importCode + "'",
  877. SRID: 3857,
  878. },
  879. }),
  880. name: 'villageBorderLayer'
  881. });
  882. map.addLayer(mapBorder);
  883. // 添加已经存在的资源图层
  884. let vectorSource = new ol.source.Vector();
  885. for (let resource of resourceList) {
  886. if (resource.theGeom && resource.fid !== this.mapTheGeomId.fid) {
  887. let feature = new ol.Feature({
  888. geometry: new ol.geom.MultiPolygon(JSON.parse(resource.theGeom).coordinates),
  889. // permanentName: permanent.name
  890. });
  891. vectorSource.addFeature(feature);
  892. }
  893. }
  894. let resourceLayer = new ol.layer.Vector({
  895. source: vectorSource,
  896. style: (feature, resolution) => {
  897. return new ol.style.Style({
  898. fill: new ol.style.Fill({
  899. //矢量图层填充颜色,以及透明度
  900. color: "rgba(0, 218, 255, 0.3)",
  901. }),
  902. stroke: new ol.style.Stroke({
  903. //边界样式
  904. color: "#00DAFF",
  905. width: 3,
  906. }),
  907. })
  908. }
  909. });
  910. map.addLayer(resourceLayer);
  911. //图层查询定位开始 ---------start
  912. hc_land = new ol.layer.Vector({
  913. title: "add Layer",
  914. source: new ol.source.Vector({
  915. projection: projection,
  916. features: new ol.format.GeoJSON().readFeatures("{\n" +
  917. " \"type\": \"Feature\",\n" +
  918. " \"geometry\":" + this.mapTheGeomId.theGeom + "}"),
  919. }),
  920. style: new ol.style.Style({
  921. fill: new ol.style.Fill({
  922. //矢量图层填充颜色,以及透明度
  923. color: "rgba(204, 255, 204,0.3)",
  924. }),
  925. stroke: new ol.style.Stroke({
  926. //边界样式
  927. color: "#47c68f",
  928. width: 3,
  929. }),
  930. }),
  931. });
  932. map.addLayer(hc_land);
  933. var maxXMap = hc_land.values_.source.featuresRtree_.rbush_.data.maxX;
  934. var maxYMap = hc_land.values_.source.featuresRtree_.rbush_.data.maxY;
  935. var minXMap = hc_land.values_.source.featuresRtree_.rbush_.data.minX;
  936. var minYMap = hc_land.values_.source.featuresRtree_.rbush_.data.minY;
  937. //定位查询位置
  938. var center = ol.extent.getCenter([maxXMap, maxYMap, minXMap, minYMap]); //获取边界区域的中心位置
  939. map.getView().animate({
  940. // 只设置需要的属性即可
  941. center: center, // 中心点
  942. zoom: 17.8, // 缩放级别
  943. rotation: undefined, // 缩放完成view视图旋转弧度
  944. duration: 1000, // 缩放持续时间,默认不需要设置
  945. });
  946. //图层查询定位结束 ---------end
  947. //开始绘制地图
  948. $("#drawPolygon").off("click").on("click", function () {
  949. map.removeLayer(hc_land);
  950. map.removeLayer(vector_drawing);
  951. that.drawInsert = null;
  952. //var source = new ol.source.Vector({wrapX: false});
  953. vector_drawing = new ol.layer.Vector({
  954. source: new ol.source.Vector(),
  955. });
  956. map.addLayer(vector_drawing);
  957. function addInteraction() {
  958. draw = new ol.interaction.Draw({
  959. source: vector_drawing.getSource(),
  960. type: "Polygon"
  961. });
  962. draw.on('drawend', function (evt) {
  963. map.removeInteraction(draw);
  964. var feature = evt.feature;
  965. var geometry = feature.getGeometry();
  966. var coordinate = geometry.getCoordinates();
  967. that.drawInsert = coordinate;
  968. });
  969. map.addInteraction(draw);
  970. }
  971. addInteraction();
  972. });
  973. //清除画图鼠标点击事件
  974. $("#drawRemove").off("click").on("click", function () {
  975. //map.addLayer(hc_land);
  976. map.removeInteraction(draw);
  977. //map.removeLayer(vector_drawing);
  978. });
  979. //还原之前图层
  980. $("#drawReset").off("click").on("click", function () {
  981. map.removeInteraction(draw);
  982. map.removeLayer(vector_drawing);
  983. map.addLayer(hc_land);
  984. that.drawInsert = null;
  985. });
  986. }
  987. if (openDarw) {
  988. document.getElementById("mapWrap").innerHTML = '';
  989. var projection = new ol.proj.Projection({
  990. //地图投影类型
  991. code: "EPSG:3857",
  992. units: "degrees",
  993. //extent:extent
  994. });
  995. var aerial = new ol.layer.Tile({
  996. source: new ol.source.XYZ({
  997. url: "http://t0.tianditu.gov.cn/img_w/wmts?" +
  998. "SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles" +
  999. "&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=cc4aba6e967096098249efa069733067",
  1000. }),
  1001. isGroup: true,
  1002. name: "卫星影像图",
  1003. });
  1004. var yingxzi = new ol.layer.Tile({
  1005. source: new ol.source.XYZ({
  1006. url: "https://t0.tianditu.gov.cn/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=cc4aba6e967096098249efa069733067",
  1007. }),
  1008. isGroup: true,
  1009. name: "天地图文字标注--卫星影像图",
  1010. });
  1011. //获取坐标是否存在
  1012. var Zb;
  1013. if (this.tGeoOrganizationLng != null && this.tGeoOrganizationLat != null && this.tGeoOrganizationLng !=""
  1014. && this.tGeoOrganizationLat !="" && this.tGeoOrganizationLng !=undefined && this.tGeoOrganizationLat !=undefined) {
  1015. Zb = [this.tGeoOrganizationLng, this.tGeoOrganizationLat]
  1016. } else {
  1017. Zb = [115.452752, 31.789033];
  1018. }
  1019. //加载地图
  1020. map = new ol.Map({
  1021. controls: ol.control.defaults({attribution: false, zoom: false, rotate: false}).extend([]), //隐藏放大缩小按钮
  1022. layers: [aerial, yingxzi],
  1023. projection: projection,
  1024. logo: 'false',
  1025. target: "mapWrap",
  1026. view: new ol.View({
  1027. center: ol.proj.fromLonLat(Zb),
  1028. //center: ol.proj.fromLonLat([115.452752, 31.789033]),
  1029. zoom: 17.8,
  1030. minZoom: 0, //地图缩小限制
  1031. maxZoom: 18, //地图放大限制
  1032. }),
  1033. });
  1034. // 添加村边界
  1035. let mapBorder = new ol.layer.Image({
  1036. source: new ol.source.ImageWMS({
  1037. url: this.mapGeoServerUrl + '/wms',
  1038. params: {
  1039. LAYERS: this.villageBorderLayerName,
  1040. cql_filter: "import_code = '" + this.mapTheGeomId.importCode + "'",
  1041. SRID: 3857,
  1042. },
  1043. }),
  1044. name: 'villageBorderLayer'
  1045. });
  1046. map.addLayer(mapBorder);
  1047. // 添加已经存在的资源图层
  1048. let vectorSource = new ol.source.Vector();
  1049. for (let resource of resourceList) {
  1050. if (resource.theGeom && resource.fid !== this.mapTheGeomId.fid) {
  1051. let feature = new ol.Feature({
  1052. geometry: new ol.geom.MultiPolygon(JSON.parse(resource.theGeom).coordinates),
  1053. // permanentName: permanent.name
  1054. });
  1055. vectorSource.addFeature(feature);
  1056. }
  1057. }
  1058. let resourceLayer = new ol.layer.Vector({
  1059. source: vectorSource,
  1060. style: (feature, resolution) => {
  1061. return new ol.style.Style({
  1062. fill: new ol.style.Fill({
  1063. //矢量图层填充颜色,以及透明度
  1064. color: "rgba(0, 218, 255, 0.3)",
  1065. }),
  1066. stroke: new ol.style.Stroke({
  1067. //边界样式
  1068. color: "#00DAFF",
  1069. width: 3,
  1070. }),
  1071. })
  1072. }
  1073. });
  1074. map.addLayer(resourceLayer);
  1075. //图层查询定位结束 ---------end
  1076. //开始绘制地图
  1077. $("#drawPolygon").off("click").on("click", function () {
  1078. //map.removeLayer(hc_land);
  1079. map.removeLayer(vector_drawing);
  1080. that.drawInsert = null;
  1081. map.removeInteraction(draw);
  1082. var source = new ol.source.Vector({wrapX: false});
  1083. vector_drawing = new ol.layer.Vector({
  1084. source: source,
  1085. });
  1086. map.addLayer(vector_drawing);
  1087. var typeSelect = "Polygon";
  1088. function addInteraction() {
  1089. var value = typeSelect;
  1090. draw = new ol.interaction.Draw({
  1091. source: source,
  1092. type: typeSelect
  1093. });
  1094. draw.on('drawend', function (evt) {
  1095. //map.removeLayer(vector_drawing);
  1096. var feature = evt.feature;
  1097. var geometry = feature.getGeometry();
  1098. var coordinate = geometry.getCoordinates();
  1099. that.drawInsert = coordinate;
  1100. map.removeInteraction(draw);
  1101. });
  1102. map.addInteraction(draw);
  1103. }
  1104. addInteraction();
  1105. });
  1106. //清除画图鼠标点击事件
  1107. $("#drawRemove").off("click").on("click", function () {
  1108. //map.addLayer(hc_land);
  1109. map.removeInteraction(draw);
  1110. //map.removeLayer(vector_drawing);
  1111. });
  1112. //还原之前图层
  1113. $("#drawReset").off("click").on("click", function () {
  1114. map.removeInteraction(draw);
  1115. map.removeLayer(vector_drawing);
  1116. //map.addLayer(hc_land);
  1117. that.drawInsert = null;
  1118. });
  1119. }
  1120. },
  1121. }
  1122. }
  1123. </script>
  1124. <style scoped type="scss">
  1125. .container_main{
  1126. height: 75vh;
  1127. overflow-y: scroll;
  1128. }
  1129. #land-btn-wrap {
  1130. position: relative;
  1131. width: 40%;
  1132. left: 60%;
  1133. bottom: 95%;
  1134. z-index: 2000;
  1135. }
  1136. #mapWrap {
  1137. width: 100%;
  1138. height: 100%;
  1139. }
  1140. .ant-btn-red {
  1141. position: relative;
  1142. display: inline-block;
  1143. background: #D0EEFF;
  1144. border: 1px solid #99D3F5;
  1145. border-radius: 4px;
  1146. padding: 4px 12px;
  1147. overflow: hidden;
  1148. color: #1E88C7;
  1149. text-decoration: none;
  1150. text-indent: 0;
  1151. line-height: 20px;
  1152. right: -36%;
  1153. }
  1154. </style>