index.vue 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811
  1. <template>
  2. <div class="app-container">
  3. <el-row :gutter="20">
  4. <!--部门数据-->
  5. <el-col :span="['2'].includes(routeParams.stillFieldType)?4:0" :xs="24" v-if="['2'].includes(routeParams.stillFieldType)">
  6. <div class="head-container">
  7. <el-input
  8. v-model="deptName"
  9. placeholder="请输入部门名称"
  10. clearable
  11. size="small"
  12. prefix-icon="el-icon-search"
  13. style="margin-bottom: 20px"
  14. />
  15. </div>
  16. <div class="head-container" ref="treeContainer" :style="{ height: treeHeight + 'px' } ">
  17. <el-tree
  18. :data="deptOptions"
  19. :props="defaultProps"
  20. :expand-on-click-node="false"
  21. node-key="id"
  22. :default-expanded-keys="[365]"
  23. :filter-node-method="filterNode"
  24. ref="tree"
  25. @node-click="handleNodeClick"
  26. />
  27. </div>
  28. </el-col>
  29. <!--用户数据-->
  30. <el-col :span="['2'].includes(routeParams.stillFieldType)?20:24" :xs="24">
  31. <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="120px" @submit.native.prevent>
  32. <el-form-item label="标题" prop="stillName">
  33. <el-input
  34. v-model="queryParams.stillName"
  35. placeholder="请输入标题"
  36. clearable
  37. size="small"
  38. @keyup.enter.native="handleQuery"
  39. />
  40. </el-form-item>
  41. <!--<el-form-item label="还田人" prop="stillUserName" v-if="['3'].includes(routeParams.stillFieldType)">-->
  42. <!--<el-input-->
  43. <!--v-model="queryParams.stillUserName"-->
  44. <!--placeholder="请输入还田人"-->
  45. <!--clearable-->
  46. <!--size="small"-->
  47. <!--@keyup.enter.native="handleQuery"-->
  48. <!--/>-->
  49. <!--</el-form-item>-->
  50. <!--<el-form-item label="所属市" prop="city" v-if="['3'].includes(routeParams.stillFieldType)">-->
  51. <!--<el-input-->
  52. <!--v-model="queryParams.city"-->
  53. <!--placeholder="请输入所属市"-->
  54. <!--clearable-->
  55. <!--size="small"-->
  56. <!--@keyup.enter.native="handleQuery"-->
  57. <!--/>-->
  58. <!--</el-form-item>-->
  59. <!-- <el-form-item label="所属乡(镇、街)" prop="village" v-if="['3'].includes(routeParams.stillFieldType)">
  60. <el-input
  61. v-model="queryParams.village"
  62. placeholder="请输入所属乡(镇、街)"
  63. clearable
  64. size="small"
  65. @keyup.enter.native="handleQuery"
  66. />
  67. </el-form-item>-->
  68. <el-form-item label="联系电话" prop="stillPhone" v-if="['3'].includes(routeParams.stillFieldType)">
  69. <el-input
  70. v-model="queryParams.stillPhone"
  71. placeholder="请输入联系电话"
  72. clearable
  73. size="small"
  74. @keyup.enter.native="handleQuery"
  75. />
  76. </el-form-item>
  77. <!--<el-form-item label="还田面积(单位㎡)" prop="stillArea">-->
  78. <!--<el-input-->
  79. <!--v-model="queryParams.leaveArea"-->
  80. <!--placeholder="请输入还田面积(单位㎡)"-->
  81. <!--clearable-->
  82. <!--size="small"-->
  83. <!--@keyup.enter.native="handleQuery"-->
  84. <!--/>-->
  85. <!--</el-form-item>-->
  86. <!--<el-form-item label="还田量(单位kg)" prop="stillAmount">-->
  87. <!--<el-input-->
  88. <!--v-model="queryParams.leaveAmount"-->
  89. <!--placeholder="请输入还田量(单位kg)"-->
  90. <!--clearable-->
  91. <!--size="small"-->
  92. <!--@keyup.enter.native="handleQuery"-->
  93. <!--/>-->
  94. <!--</el-form-item>-->
  95. <!--<el-form-item label="还田时间" prop="stillTime" v-if="['2','3'].includes(routeParams.stillFieldType)">-->
  96. <!--<el-date-picker clearable size="small"-->
  97. <!--v-model="queryParams.stillTime"-->
  98. <!--type="year"-->
  99. <!--value-format="yyyy"-->
  100. <!--placeholder="选择还田时间">-->
  101. <!--</el-date-picker>-->
  102. <!--</el-form-item>-->
  103. <el-form-item label="所属县(市丶区)" prop="district" v-if="['3'].includes(routeParams.stillFieldType)">
  104. <el-input
  105. v-model="queryParams.district"
  106. placeholder="请输入所属县(市丶区)"
  107. clearable
  108. size="small"
  109. @keyup.enter.native="handleQuery"
  110. />
  111. </el-form-item>
  112. <!--<el-form-item label="地块编号" prop="landInfoId" v-if="['3'].includes(routeParams.stillFieldType)">-->
  113. <!--<el-input-->
  114. <!--v-model="queryParams.landInfoId"-->
  115. <!--placeholder="请输入地块编号"-->
  116. <!--clearable-->
  117. <!--size="small"-->
  118. <!--@keyup.enter.native="handleQuery"-->
  119. <!--/>-->
  120. <!--</el-form-item>-->
  121. <el-form-item label="还田开始时间" prop="startStillTime" v-if="['2','3'].includes(routeParams.stillFieldType)"label-width="120px">
  122. <el-date-picker clearable
  123. @change="startStillTimeChange"
  124. v-model="queryParams.startStillTime"
  125. type="year"
  126. value-format="yyyy"
  127. size="small"
  128. style="width: 215px;"
  129. placeholder="请选择还田开始时间">
  130. </el-date-picker>
  131. </el-form-item>
  132. <el-form-item label="还田结束时间" prop="endStillTime" v-if="['2','3'].includes(routeParams.stillFieldType)" label-width="120px">
  133. <el-date-picker clearable
  134. @change="endStillTimeChange"
  135. v-model="queryParams.endStillTime"
  136. type="year"
  137. value-format="yyyy"
  138. size="small"
  139. style="width: 215px;"
  140. placeholder="请选择还田结束时间">
  141. </el-date-picker>
  142. </el-form-item>
  143. <!--<el-form-item label="补助金额" prop="subsidyMoney" v-if="['3'].includes(routeParams.stillFieldType)">-->
  144. <!--<el-input-->
  145. <!--v-model="queryParams.subsidyMoney"-->
  146. <!--placeholder="请输入补助金额"-->
  147. <!--clearable-->
  148. <!--size="small"-->
  149. <!--@keyup.enter.native="handleQuery"-->
  150. <!--/>-->
  151. <!--</el-form-item>-->
  152. <el-form-item>
  153. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  154. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  155. </el-form-item>
  156. </el-form>
  157. <el-row :gutter="10" class="mb8">
  158. <el-col :span="1.5" v-if="['1'].includes(routeParams.stillFieldType)">
  159. <el-button
  160. type="primary"
  161. plain
  162. icon="el-icon-plus"
  163. size="mini"
  164. @click="handleAdd"
  165. v-hasPermi="['StillField:StillField:add']"
  166. >新增</el-button>
  167. </el-col>
  168. <el-col :span="1.5" v-if="['1'].includes(routeParams.stillFieldType)">
  169. <el-button
  170. type="success"
  171. plain
  172. icon="el-icon-edit"
  173. size="mini"
  174. :disabled="single"
  175. @click="handleUpdate"
  176. v-hasPermi="['StillField:StillField:edit']"
  177. >修改</el-button>
  178. </el-col>
  179. <el-col :span="1.5" v-if="['1'].includes(routeParams.stillFieldType)">
  180. <el-button
  181. type="danger"
  182. plain
  183. icon="el-icon-delete"
  184. size="mini"
  185. :disabled="multiple"
  186. @click="handleDelete"
  187. v-hasPermi="['StillField:StillField:remove']"
  188. >删除</el-button>
  189. </el-col>
  190. <!--<el-col :span="1.5">-->
  191. <!--<el-button-->
  192. <!--type="info"-->
  193. <!--plain-->
  194. <!--icon="el-icon-upload2"-->
  195. <!--size="mini"-->
  196. <!--@click="handleImport"-->
  197. <!--v-hasPermi="['StillField:StillField:import']"-->
  198. <!--&gt;导入-->
  199. <!--</el-button>-->
  200. <!--</el-col>-->
  201. <el-col :span="1.5" v-if="['1', '2', '3'].includes(routeParams.stillFieldType)">
  202. <el-button
  203. type="warning"
  204. plain
  205. icon="el-icon-download"
  206. size="mini"
  207. @click="handleExport"
  208. v-hasPermi="['StillField:StillField:export']"
  209. >导出</el-button>
  210. </el-col>
  211. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  212. </el-row>
  213. <el-table v-loading="loading" :data="StillFieldList" @selection-change="handleSelectionChange">
  214. <el-table-column type="selection" width="55" align="center" />
  215. <!--<el-table-column label="${comment}" align="center" prop="id" />-->
  216. <el-table-column label="标题" align="center" prop="stillName" />
  217. <el-table-column label="还田面积(单位㎡)" align="center" prop="stillArea" />
  218. <el-table-column label="还田类型" align="center" prop="stillType" >
  219. <template slot-scope="scope">
  220. <dict-tag :options="dict.type.farm_returning_type" :value="scope.row.stillType"/>
  221. </template>
  222. </el-table-column>
  223. <el-table-column label="联系电话" align="center" prop="stillPhone" />
  224. <el-table-column label="还田时间" align="center" prop="stillTime" width="180">
  225. <template slot-scope="scope">
  226. <span>{{ scope.row.stillTime }}年</span>
  227. </template>
  228. </el-table-column>
  229. <el-table-column label="所属部门" align="center" prop="deptName" />
  230. <el-table-column label="创建人" align="center" prop="createName" />
  231. <el-table-column label="创建时间" align="center" prop="createTime" />
  232. <el-table-column label="修改人" align="center" prop="updateName" />
  233. <el-table-column label="修改时间" align="center" prop="updateTime" />
  234. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  235. <template slot-scope="scope">
  236. <el-button v-if="['2', '3'].includes(routeParams.stillFieldType)"
  237. size="mini"
  238. type="text"
  239. icon="el-icon-view"
  240. @click="handleDetail(scope.row)"
  241. v-hasPermi="['StillField:StillField:edit']"
  242. >详情</el-button>
  243. <el-button v-if="['1'].includes(routeParams.stillFieldType)"
  244. size="mini"
  245. type="text"
  246. icon="el-icon-edit"
  247. @click="handleUpdate(scope.row)"
  248. v-hasPermi="['StillField:StillField:edit']"
  249. >修改</el-button>
  250. <el-button v-if="['1'].includes(routeParams.stillFieldType)"
  251. size="mini"
  252. type="text"
  253. icon="el-icon-delete"
  254. @click="handleDelete(scope.row)"
  255. v-hasPermi="['StillField:StillField:remove']"
  256. >删除</el-button>
  257. </template>
  258. </el-table-column>
  259. </el-table>
  260. <pagination
  261. v-show="total>0"
  262. :total="total"
  263. :page.sync="queryParams.pageNum"
  264. :limit.sync="queryParams.pageSize"
  265. @pagination="getList"
  266. />
  267. </el-col>
  268. </el-row>
  269. <!-- 添加或修改农业还田对话框 -->
  270. <el-dialog :title="title" :visible.sync="open" width="1000px" class="form-style">
  271. <el-form ref="form" :model="form" :rules="rules" label-width="150px">
  272. <el-row :gutter="20">
  273. <el-col :span="12">
  274. <el-form-item label="标题" prop="stillName">
  275. <el-input v-model="form.stillName" placeholder="请输入标题" maxlength="20"/>
  276. </el-form-item>
  277. <el-form-item label="还田面积(单位㎡)" prop="stillArea">
  278. <el-input v-model="form.stillArea" placeholder="请输入还田面积(单位㎡)" maxlength="20"/>
  279. </el-form-item>
  280. <el-form-item label="还田量(单位kg)" prop="stillAmount">
  281. <el-input v-model="form.stillAmount" placeholder="请输入还田量(单位kg)" maxlength="20"/>
  282. </el-form-item>
  283. <el-form-item label="联系电话" prop="stillPhone">
  284. <el-input v-model="form.stillPhone" placeholder="请输入联系电话" maxlength="13"/>
  285. </el-form-item>
  286. <el-form-item label="还田类型" prop="stillType">
  287. <el-select v-model="form.stillType" placeholder="请选择还田类型">
  288. <el-option
  289. v-for="dict in dict.type.farm_returning_type"
  290. :key="dict.value"
  291. :label="dict.label"
  292. :value="dict.value"
  293. ></el-option>
  294. </el-select>
  295. </el-form-item>
  296. </el-col>
  297. <el-col :span="12">
  298. <el-form-item label="还田时间" prop="stillTime">
  299. <el-date-picker clearable size="small"
  300. v-model="form.stillTime"
  301. type="year"
  302. value-format="yyyy"
  303. placeholder="选择还田时间">
  304. </el-date-picker>
  305. </el-form-item>
  306. <el-form-item label="所属县(市)区" prop="district">
  307. <el-input v-model="form.district" placeholder="请输入所属县(市)区" maxlength="20"/>
  308. </el-form-item>
  309. <el-form-item label="所属乡镇(街)" prop="village">
  310. <el-input v-model="form.village" placeholder="请输入所属乡镇(街)" maxlength="20"/>
  311. </el-form-item>
  312. <el-form-item label="所属部门" prop="deptId" :label-width="labelWidth">
  313. <!-- <treeselect-->
  314. <!-- v-if="!disable"-->
  315. <!-- :flat="false"-->
  316. <!-- :allowSelectingDisabledDescendants="true"-->
  317. <!-- v-model="form.deptId" :options="deptOptions" :show-count="true"-->
  318. <!-- placeholder="请选择所属部门"/>-->
  319. <!-- <el-select v-model="form.deptName" placeholder="请选择所属部门" :style="inputStyle" v-if="disable" :disabled="disable">-->
  320. <!-- <el-option-->
  321. <!-- v-for="dept in deptOptions"-->
  322. <!-- :key="dept.deptId"-->
  323. <!-- :label="dept.deptName"-->
  324. <!-- :value="dept"-->
  325. <!-- />-->
  326. <!-- </el-select>-->
  327. <!-- <deptselector :setValue=setDataDeptId :dataDeptId="form.deptId"-->
  328. <!-- v-model="form.deptId"></deptselector>-->
  329. <treeselect v-model="form.deptId" :options="deptOptions" multiple:false :show-count="true" :noResultsText="'空'" :noOptionsText="'空'"
  330. placeholder="请选择部门" @select="hx"/>
  331. </el-form-item>
  332. <el-form-item label="备注" prop="remarks">
  333. <el-input v-model="form.remarks" placeholder="请输入备注" maxlength="30"/>
  334. </el-form-item>
  335. </el-col>
  336. </el-row>
  337. </el-form>
  338. <div slot="footer" class="dialog-footer">
  339. <el-button type="primary" @click="submitForm" v-if="submit">确 定</el-button>
  340. <el-button @click="cancel">取 消</el-button>
  341. </div>
  342. </el-dialog>
  343. <!-- 农业还田详情对话框 -->
  344. <el-dialog :title="title" :visible.sync="openDetail" width="800px" class="form-style">
  345. <el-form ref="form" :model="form" :rules="rules" label-width="150px">
  346. <el-row :gutter="24">
  347. <el-col :span="12">
  348. <el-form-item label="标题:" prop="stillName">
  349. <label>{{ form.stillName }}</label>
  350. </el-form-item>
  351. <el-form-item label="还田面积(单位㎡):" prop="stillArea">
  352. <label>{{ form.stillArea }}</label>
  353. </el-form-item>
  354. <el-form-item label="还田量(单位kg):" prop="stillAmount">
  355. <label>{{ form.stillAmount }}</label>
  356. </el-form-item>
  357. <!--<el-form-item label="还田人:" prop="stillUserName">-->
  358. <!--<label>{{ form.stillUserName }}</label>-->
  359. <!--</el-form-item>-->
  360. <el-form-item label="联系电话:" prop="stillPhone">
  361. <label>{{ form.stillPhone }}</label>
  362. </el-form-item>
  363. <el-form-item label="还田类型:" prop="stillType">
  364. <label v-for="(dict, index) in dict.type.farm_returning_type" v-if="form.stillType == dict.value" >{{dict.label}}</label>
  365. </el-form-item>
  366. </el-col>
  367. <el-col :span="12">
  368. <el-form-item label="还田时间:" prop="stillTime">
  369. <label>{{ form.stillTime }}年</label>
  370. </el-form-item>
  371. <el-form-item label="所属县(市丶区):" prop="district">
  372. <label>{{ form.district }}</label>
  373. </el-form-item>
  374. <el-form-item label="所属乡(镇、街):" prop="village">
  375. <label>{{ form.village }}</label>
  376. </el-form-item>
  377. <el-form-item label="所属部门:" prop="deptId" >
  378. <label>{{ form.deptName }}</label>
  379. </el-form-item>
  380. <el-form-item label="备注:" prop="remarks">
  381. <label>{{ form.remarks }}</label>
  382. </el-form-item>
  383. </el-col>
  384. </el-row>
  385. </el-form>
  386. <div slot="footer" class="dialog-footer">
  387. <el-button type="primary" @click="submitForm" v-if="submit">确 定</el-button>
  388. <el-button @click="cancel">关 闭</el-button>
  389. </div>
  390. </el-dialog>
  391. <!-- 导入对话框 -->
  392. <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
  393. <el-upload
  394. ref="upload"
  395. :limit="1"
  396. accept=".xlsx, .xls"
  397. :headers="upload.headers"
  398. :action="upload.url + '?updateSupport=' + upload.updateSupport"
  399. :disabled="upload.isUploading"
  400. :on-progress="handleFileUploadProgress"
  401. :on-success="handleFileSuccess"
  402. :auto-upload="false"
  403. drag
  404. >
  405. <i class="el-icon-upload"></i>
  406. <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
  407. <div class="el-upload__tip text-center" slot="tip">
  408. <div class="el-upload__tip" slot="tip">
  409. <el-checkbox v-model="upload.updateSupport"/>
  410. 是否更新已经存在的数据
  411. </div>
  412. <span>仅允许导入xls、xlsx格式文件。</span>
  413. <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;"
  414. @click="importTemplate">下载模板
  415. </el-link>
  416. </div>
  417. </el-upload>
  418. <div slot="footer" class="dialog-footer">
  419. <el-button type="primary" @click="submitFileForm">确 定</el-button>
  420. <el-button @click="upload.open = false">取 消</el-button>
  421. </div>
  422. </el-dialog>
  423. </div>
  424. </template>
  425. <script>
  426. import { listStillField, getStillField, delStillField, addStillField, updateStillField } from "@/api/data/digitalagriculture/StillField/StillField";
  427. import {checkPositiveDecimal, checkNonnegativeInteger, validPhoneMobile} from "@/api/rules/rules";
  428. import deptselector from '@/views/components/deptselector'
  429. import { getToken } from '@/utils/auth'
  430. import { treeselect } from '@/api/system/dept'
  431. import Treeselect from '@riophae/vue-treeselect'
  432. import '@riophae/vue-treeselect/dist/vue-treeselect.css'
  433. import {format_date} from "@/views/data/common/dateExport";
  434. export default {
  435. name: "StillField",
  436. dicts:['farm_returning_type'],
  437. components: {
  438. deptselector,
  439. Treeselect,
  440. },
  441. data() {
  442. return {
  443. // 树形容器
  444. treeContainer: null,
  445. // 树形高度
  446. treeHeight: 0,
  447. // 遮罩层
  448. loading: true,
  449. // 选中数组
  450. ids: [],
  451. // 非单个禁用
  452. single: true,
  453. // 非多个禁用
  454. multiple: true,
  455. // 显示搜索条件
  456. showSearch: true,
  457. // 总条数
  458. total: 0,
  459. // 弹出层宽度
  460. labelWidth: '150px',
  461. // 文本框宽度
  462. inputStyle: 'width: 310px',
  463. // 农业还田表格数据
  464. StillFieldList: [],
  465. // 弹出层标题
  466. title: "",
  467. // 是否显示弹出层
  468. open: false,
  469. // 是否显示详情页弹出层
  470. openDetail: false,
  471. // 是否显示提交按钮
  472. submit: false,
  473. // 部门名称
  474. deptName: undefined,
  475. // 部门树选项
  476. deptOptions: undefined,
  477. // 导入参数
  478. upload: {
  479. // 是否显示导入弹出层
  480. open: false,
  481. // 导入弹出层标题
  482. title: '',
  483. // 是否禁用上传
  484. isUploading: false,
  485. // 是否更新已经存在的数据
  486. updateSupport: 0,
  487. // 设置上传的请求头部
  488. headers: { Authorization: 'Bearer ' + getToken() },
  489. // 上传的地址
  490. url: process.env.VUE_APP_BASE_API + '/center-data/StillField/import/importData'
  491. },
  492. // 路由参数
  493. routeParams: {
  494. stillFieldType: null
  495. },
  496. // 查询参数
  497. queryParams: {
  498. pageNum: 1,
  499. pageSize: 10,
  500. stillName: null,
  501. stillArea: null,
  502. stillType: null,
  503. stillAmount: null,
  504. stillUserName: null,
  505. stillPhone: null,
  506. subsidyMoney: null,
  507. stillTime: null,
  508. startStillTime: null,
  509. endStillTime: null,
  510. city: null,
  511. district: null,
  512. village: null,
  513. landInfoId: null,
  514. createDate: null,
  515. updateDate: null,
  516. remarks: null,
  517. deptId: null,
  518. deptName: null,
  519. stillFieldType: null,
  520. },
  521. // 表单参数
  522. form: {},
  523. defaultProps: {
  524. children: 'children',
  525. label: 'label'
  526. },
  527. // 正小数校验
  528. checkPositiveDecimal: checkPositiveDecimal,
  529. // 正整数校验
  530. checkNonnegativeInteger: checkNonnegativeInteger,
  531. //手机号,座机号校验
  532. validPhoneMobile: validPhoneMobile,
  533. // 表单校验
  534. rules: {
  535. deptId: [
  536. {required: true, message: "所属部门不能为空", trigger: "change"},
  537. ],
  538. stillArea: [
  539. {required: true, message: "面积不能为空", trigger: "blur"},
  540. {validator: checkPositiveDecimal, trigger: 'blur'}
  541. ],
  542. stillTime: [
  543. {required: true, message: "还田时间不能为空", trigger: "blur"},
  544. ],
  545. stillAmount: [
  546. {required: true, message: "还田量不能为空", trigger: "blur"},
  547. {validator: checkPositiveDecimal, trigger: 'blur'}
  548. ],
  549. subsidyMoney: [
  550. {required: true, message: "补助金额不能为空", trigger: "blur"},
  551. {validator: checkPositiveDecimal, trigger: 'blur'}
  552. ],
  553. stillType: [
  554. {required: true, message: "还田类型不能为空", trigger: "change"},
  555. ],
  556. stillName: [
  557. { required: true, message: "标题不能为空", trigger: "blur" },
  558. { min: 2, max: 20, message: '标题长度必须介于 2 和 20 之间', trigger: 'blur' }
  559. ],
  560. stillPhone: [
  561. { required: true, message: "联系电话不能为空", trigger: "blur" },
  562. {validator: validPhoneMobile, trigger: 'blur'}
  563. ],
  564. }
  565. };
  566. },
  567. watch: {
  568. // 根据名称筛选部门树
  569. deptName(val) {
  570. this.$refs.tree.filter(val)
  571. }
  572. },
  573. created() {
  574. // 路由参数 秸秆还田类型
  575. this.routeParams.stillFieldType = this.$route.query.stillFieldType;
  576. this.getList();
  577. this.getTreeselect();
  578. },
  579. mounted() {
  580. this.treeContainer = this.$refs.treeContainer
  581. window.addEventListener('resize', this.handleResize)
  582. this.handleResize()
  583. },
  584. beforeDestroy() {
  585. window.removeEventListener('resize', this.handleResize)
  586. },
  587. methods: {
  588. /** 查询部门下拉树结构 */
  589. getTreeselect() {
  590. treeselect().then(response => {
  591. this.deptOptions = response.data
  592. })
  593. },
  594. hx(node) {
  595. this.form.dataDeptId = node.id
  596. this.form.deptId = node.id
  597. this.form.deptName = node.label
  598. this.$refs.form.validateField('deptId');
  599. },
  600. handleResize() {
  601. this.treeHeight = window.innerHeight - 200// 按需减去其他元素的高度
  602. },
  603. setDataDeptId(e) {
  604. this.form.deptId = e.deptId
  605. this.form.deptName = e.deptName
  606. },
  607. // 筛选节点
  608. filterNode(value, data) {
  609. if (!value) return true
  610. return data.label.indexOf(value) !== -1
  611. },
  612. // 节点单击事件
  613. handleNodeClick(data) {
  614. this.queryParams.deptId = data.id
  615. this.handleQuery()
  616. },
  617. /** 查询农业还田列表 */
  618. getList() {
  619. this.loading = true;
  620. this.queryParams.stillFieldType = this.routeParams.stillFieldType;// 查询秸秆还田信息类型
  621. listStillField(this.queryParams).then(response => {
  622. this.StillFieldList = response.rows;
  623. this.total = response.total;
  624. this.loading = false;
  625. });
  626. },
  627. // 取消按钮
  628. cancel() {
  629. this.open = false;
  630. this.openDetail = false;
  631. this.reset();
  632. },
  633. // 表单重置
  634. reset() {
  635. this.form = {
  636. id: null,
  637. stillName: null,
  638. stillArea: null,
  639. stillType: null,
  640. stillAmount: null,
  641. stillUserName: null,
  642. stillPhone: null,
  643. subsidyMoney: null,
  644. stillTime: null,
  645. city: null,
  646. district: null,
  647. village: null,
  648. landInfoId: null,
  649. createBy: null,
  650. createDate: null,
  651. updateBy: null,
  652. updateDate: null,
  653. remarks: null,
  654. delFlag: null,
  655. deptId: null,
  656. deptName: null
  657. };
  658. this.resetForm("form");
  659. },
  660. /** 搜索按钮操作 */
  661. handleQuery() {
  662. this.queryParams.pageNum = 1;
  663. this.getList();
  664. },
  665. /** 重置按钮操作 */
  666. resetQuery() {
  667. this.resetForm("queryForm");
  668. this.handleQuery();
  669. },
  670. // 多选框选中数据
  671. handleSelectionChange(selection) {
  672. this.ids = selection.map(item => item.id)
  673. this.single = selection.length!==1
  674. this.multiple = !selection.length
  675. },
  676. /** 新增按钮操作 */
  677. handleAdd() {
  678. this.reset();
  679. this.open = true;
  680. this.submit = true;
  681. this.title = "添加农业还田";
  682. },
  683. /** 修改按钮操作 */
  684. handleUpdate(row) {
  685. this.reset();
  686. const id = row.id || this.ids
  687. getStillField(id).then(response => {
  688. this.form = response.data;
  689. this.open = true;
  690. this.submit = true;
  691. this.title = "修改农业还田";
  692. });
  693. },
  694. /** 详情按钮操作 */
  695. handleDetail(row) {
  696. this.reset();
  697. const id = row.id || this.ids
  698. getStillField(id).then(response => {
  699. this.form = response.data;
  700. this.openDetail = true;
  701. this.submit = false;
  702. this.title = "农业还田详情";
  703. });
  704. },
  705. /** 提交按钮 */
  706. submitForm() {
  707. this.$refs["form"].validate(valid => {
  708. if (valid) {
  709. // this.form.deptName = this.deptOptions.filter((item) => {
  710. // return this.form.deptId == item.id;
  711. // })[0].label;
  712. if (this.form.id != null) {
  713. updateStillField(this.form).then(response => {
  714. this.$modal.msgSuccess("修改成功");
  715. this.open = false;
  716. this.getList();
  717. });
  718. } else {
  719. addStillField(this.form).then(response => {
  720. this.$modal.msgSuccess("新增成功");
  721. this.open = false;
  722. this.getList();
  723. });
  724. }
  725. }
  726. });
  727. },
  728. /** 删除按钮操作 */
  729. handleDelete(row) {
  730. const ids = row.id || this.ids;
  731. this.$modal.confirm('是否删除选中的数据').then(function() {
  732. return delStillField(ids);
  733. }).then(() => {
  734. this.getList();
  735. this.$modal.msgSuccess("删除成功");
  736. }).catch(() => {});
  737. },
  738. /** 导入按钮操作 */
  739. handleImport() {
  740. this.upload.title = '导入'
  741. this.upload.open = true
  742. },
  743. /** 下载模板操作 */
  744. importTemplate() {
  745. this.download('/center-data/StillField/importTemplate', {}, `StillField_template_${new Date().getTime()}.xlsx`)
  746. },
  747. // 文件上传中处理
  748. handleFileUploadProgress(event, file, fileList) {
  749. this.upload.isUploading = true
  750. },
  751. // 文件上传成功处理
  752. handleFileSuccess(response, file, fileList) {
  753. this.upload.open = false
  754. this.upload.isUploading = false
  755. this.$refs.upload.clearFiles()
  756. this.$alert('<div style=\'overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;\'>' + response.msg + '</div>', '导入结果', { dangerouslyUseHTMLString: true })
  757. this.getList()
  758. },
  759. // 提交上传文件
  760. submitFileForm() {
  761. this.$refs.upload.submit()
  762. },
  763. /** 导出按钮操作 */
  764. handleExport() {
  765. let str = this.$route.query.stillFieldType=='3' ? '秸秆还田统计':(this.$route.query.stillFieldType=='1'?'秸秆还田上报':'秸秆还田台账');
  766. this.download('/center-data/StillField/export', {
  767. ...this.queryParams
  768. }, str+`_${format_date(new Date())}.xlsx`)
  769. },
  770. /** 还田开始时间 */
  771. startStillTimeChange(value) {
  772. this.$set(this.queryParams, "startStillTime", value);
  773. if (
  774. new Date(this.queryParams.endStillTime).getTime() != 0 &&
  775. new Date(value).getTime() >
  776. new Date(this.queryParams.endStillTime).getTime()
  777. ) {
  778. this.queryParams.startStillTime = "";
  779. this.$message.error("请选择的时间小于还田结束时间");
  780. }
  781. },
  782. /** 还田结束时间 */
  783. endStillTimeChange(value) {
  784. this.$set(this.queryParams, "endStillTime", value);
  785. if (
  786. new Date(this.queryParams.startStillTime).getTime() != 0 &&
  787. new Date(value).getTime() <
  788. new Date(this.queryParams.startStillTime).getTime()
  789. ) {
  790. this.queryParams.endStillTime = "";
  791. this.$message.error("请选择时间大于还田开始时间");
  792. }
  793. }
  794. }
  795. };
  796. </script>
  797. <style>
  798. .head-container {
  799. overflow-y: auto;
  800. }
  801. </style>