index.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396
  1. <template>
  2. <el-row class="el-row-container" v-loading="loading">
  3. <el-col
  4. v-if="!detailType"
  5. :span="4"
  6. style="height:100%;padding-bottom:32px;"
  7. >
  8. <el-card style="margin:16px;height: 100%; overflow-y: auto">
  9. <data-report-left
  10. @setCurrentData="setCurrentData"
  11. :treeData="treeData"
  12. ></data-report-left>
  13. </el-card>
  14. </el-col>
  15. <el-col
  16. v-show="!detailType"
  17. :span="20"
  18. style="padding: 16px 16px 16px 0; height: 100%"
  19. >
  20. <el-card style="height: 100%; overflow-y: auto">
  21. <el-col :span="24" class="elrow-main__col-top">
  22. <div>
  23. <el-select
  24. placeholder="用户卡号"
  25. v-model="labelType"
  26. >
  27. <el-option
  28. v-for="item in options"
  29. :key="item.value"
  30. :label="item.label"
  31. :value="item.value">
  32. </el-option>
  33. </el-select>
  34. <el-input
  35. v-model="inputContent"
  36. style="width: 250px;margin:0 16px;"
  37. placeholder="请输入内容"
  38. @keyup.enter.native="handleSearch"
  39. clearable
  40. />
  41. <el-select
  42. placeholder="IC卡状态"
  43. v-model="cardStatus"
  44. style="margin-right:16px"
  45. >
  46. <el-option
  47. v-for="item in icType"
  48. :key="item.value"
  49. :label="item.label"
  50. :value="item.value">
  51. </el-option>
  52. </el-select>
  53. <el-button
  54. type="primary"
  55. size="small"
  56. @click="handleSearch"
  57. >查询</el-button
  58. >
  59. </div>
  60. <div class="top-left">
  61. <el-button
  62. type="primary"
  63. size="small"
  64. @click="addICard"
  65. >新增IC卡
  66. </el-button
  67. ></div>
  68. </el-col>
  69. <el-col :span="24" class="elrow-main__col-bottom">
  70. <b-table
  71. ref="tableRef"
  72. :args="{ 'highlight-current-row': true }"
  73. :data="loadData"
  74. :columns="columns"
  75. isShowIndex
  76. >
  77. <template #status="scope">
  78. <span style="display:flex;align-items:center;justify-content:center">
  79. {{ scope.row.cardStatusContent }}
  80. </span>
  81. </template>
  82. <template #cardAmount="scope">
  83. <span style="display:flex;align-items:center;justify-content:center">
  84. {{ Number(scope.row.cardAmount).toFixed(2) }}
  85. </span>
  86. </template>
  87. <template #operate="scope">
  88. <el-link
  89. size="small"
  90. :underline="false"
  91. :type="scope.row.cardStatus == '2'?'info':'primary'"
  92. style="margin-right: 10px"
  93. @click="editCardHandler(scope.row,2)"
  94. >注销</el-link
  95. >
  96. <el-link
  97. size="small"
  98. v-if="scope.row.cardStatus == '0'"
  99. :underline="false"
  100. type="primary"
  101. style="margin-right: 10px"
  102. @click="editCardHandler(scope.row,1)"
  103. >挂失</el-link>
  104. <el-link
  105. size="small"
  106. v-if="scope.row.cardStatus == '1'"
  107. :underline="false"
  108. type="primary"
  109. style="margin-right: 10px"
  110. @click="editCardHandler(scope.row,0)"
  111. >解挂</el-link>
  112. <el-link
  113. size="small"
  114. :underline="false"
  115. type="danger"
  116. style="margin-right: 10px"
  117. @click="deleteCardHandler(scope.row)"
  118. >删除</el-link>
  119. <el-link
  120. v-if="scope.row.cardStatus !== '2'"
  121. size="small"
  122. :underline="false"
  123. type="warning"
  124. style="margin-right: 10px"
  125. @click="rechargeCardHandler(scope.row)"
  126. >充值</el-link>
  127. <el-link
  128. size="small"
  129. :underline="false"
  130. type="primary"
  131. style="margin-right: 10px"
  132. @click="changeDataDetailShow(scope.row)"
  133. >数据详情</el-link>
  134. </template>
  135. </b-table>
  136. </el-col>
  137. </el-card>
  138. </el-col>
  139. <AddedICCard
  140. :visible.sync="associationManageShow"
  141. :areaId="currentClickId"
  142. :userList="userList"
  143. @refresh="handleSearch"
  144. />
  145. <recharge-card
  146. :visible.sync="rechargeShow"
  147. :rechargeCardData="rechargeCardData"
  148. @refresh="handleSearch"
  149. />
  150. <data-detail
  151. v-if="detailType"
  152. :detailCardId="detailCardId"
  153. @backPage="showList"
  154. />
  155. </el-row>
  156. </template>
  157. <script>
  158. import { Message } from 'element-ui';
  159. import { getFarmerList } from '@/api/farmer/list.js'
  160. import { getTree } from '@/api/tree.js'
  161. import { getCardList,editCard,deleteCard } from '@/api/card/index.js'
  162. import BTable from '@/components/Table/index.vue';
  163. import DataReportLeft from '@/components/DataReportLeft/index.vue'
  164. import AddedICCard from './components/addedICCard.vue'
  165. import RechargeCard from './components/rechargeCard.vue';
  166. import DataDetail from './dataDetail.vue';
  167. import { assign, omit } from 'lodash-es';
  168. export default {
  169. name: 'waterCardManage',
  170. components: { BTable,DataReportLeft,AddedICCard,RechargeCard,DataDetail },
  171. data() {
  172. return {
  173. inputContent:'',
  174. labelType:0,
  175. options:[{
  176. value: 0,
  177. label: '农户手机号',
  178. },{
  179. value: 1,
  180. label: '用户卡号',
  181. },{
  182. value: 2,
  183. label: '农户姓名',
  184. }],
  185. cardStatus: '',
  186. icType: [{
  187. value:'',
  188. label:'全部'
  189. },{
  190. value: 0,
  191. label: '正常'
  192. },{
  193. value: 1,
  194. label: '挂失'
  195. },{
  196. value: 2,
  197. label: '注销'
  198. }],
  199. detailType: false,
  200. form: {
  201. productName: ''
  202. },
  203. currentClickId:'',
  204. treeData: [],
  205. loading: false,
  206. associationManageShow: false,
  207. dataDetailShow: false,
  208. rechargeShow: false,
  209. userList: [],
  210. rechargeCardData: {},
  211. detailCardId: '',
  212. columns: [
  213. {
  214. label: 'IC卡号',
  215. prop: 'cardNo',
  216. customRender: '',
  217. align: 'center'
  218. },
  219. {
  220. label: '农户姓名',
  221. prop: 'farmerName',
  222. customRender: '',
  223. align: 'center'
  224. },
  225. {
  226. label: 'IC卡状态',
  227. prop: 'cardStatusContent',
  228. customRender: 'status',
  229. align: 'center'
  230. },{
  231. label: '停泵下限',
  232. prop: 'phone',
  233. customRender: '',
  234. align: 'center'
  235. },{
  236. label: '卡内余额',
  237. prop: 'cardAmount',
  238. customRender: 'cardAmount',
  239. align: 'center'
  240. },{
  241. label: '累计用水量',
  242. prop: 'waterNumTotal',
  243. customRender: '',
  244. align: 'center'
  245. },{
  246. label: '累计用电量',
  247. prop: 'electricNumTotal',
  248. customRender: '',
  249. align: 'center'
  250. },
  251. {
  252. label: '操作',
  253. customRender: 'operate',
  254. width: 250,
  255. align: 'right'
  256. }
  257. ]
  258. };
  259. },
  260. methods: {
  261. // 注销 cardStatus = 2,解挂 cardStatus = 0,挂失 cardStatus = 1
  262. async editCardHandler(row,cardStatus) {
  263. if(cardStatus == '2')return
  264. const { farmerId,cardNo,cardAmount,cardId } = row
  265. await editCard({
  266. farmerId,
  267. cardNo,
  268. cardAmount,
  269. cardId,
  270. cardStatus
  271. })
  272. this.handleSearch()
  273. },
  274. // 删除
  275. deleteCardHandler(row){
  276. const {cardId,farmerName} = row
  277. this.$modal
  278. .confirm(`是否确认删除农户${farmerName}`)
  279. .then(()=> {
  280. deleteCard({
  281. cardIds: cardId
  282. }).then(() => {
  283. Message({ message: "删除成功", type: 'success' });
  284. this.handleSearch()
  285. })
  286. })
  287. },
  288. // 充值
  289. async rechargeCardHandler() {},
  290. async searchHandler(farmerName,areaId) {
  291. const res = await getFarmerList({
  292. farmerName,
  293. areaId
  294. })
  295. this.userList = res.data
  296. },
  297. setCurrentData(areaId) {
  298. this.currentClickId = areaId
  299. this.$refs.tableRef.refresh(false);
  300. this.searchHandler(this.farmerName,areaId)
  301. },
  302. showList(){
  303. this.detailType = false
  304. },
  305. async addICard() {
  306. this.associationManageShow = true
  307. },
  308. async loadData(parameter) {
  309. if(!this.currentClickId ) {
  310. const treeList = this.$store.state.tree.treeList
  311. let res = []
  312. if (treeList.code === '000000') {
  313. res = treeList
  314. } else {
  315. res = await getTree()
  316. this.$store.dispatch('tree/setTree', res)
  317. }
  318. this.treeData = res?.data
  319. this.currentClick = res?.data[0]
  320. this.currentClickId = this.currentClick?.cusareaId
  321. }
  322. this.searchHandler(this.farmerName,this.currentClickId)
  323. return this.getTableData(parameter,this.currentClickId);
  324. },
  325. changeDataDetailShow(row) {
  326. this.detailType = true
  327. const {cardId} = row
  328. this.detailCardId = cardId
  329. },
  330. getTableData(parameter,areaId) {
  331. switch(this.labelType){
  332. case 0:
  333. this.farmerPhone = this.inputContent
  334. break
  335. case 1:
  336. this.cardNo = this.inputContent
  337. break
  338. case 2:
  339. this.farmerName = this.inputContent
  340. break
  341. default:
  342. this.farmerPhone = this.inputContent
  343. }
  344. const params = {
  345. farmerName: this.farmerName,
  346. cardNo: this.cardNo,
  347. farmerPhone: this.farmerPhone,
  348. areaId,
  349. cardStatus: this.cardStatus
  350. }
  351. const payload = omit(assign({}, parameter, params), []);
  352. return getCardList(payload)
  353. },
  354. handleSearch() {
  355. this.$refs.tableRef.refresh(true);
  356. },
  357. rechargeCardHandler(row) {
  358. this.rechargeCardData = row
  359. this.rechargeShow = true
  360. }
  361. }
  362. };
  363. </script>
  364. <style lang="scss" scoped>
  365. .el-row-container{
  366. height: 100%;
  367. }
  368. .elrow-main__col-top {
  369. display: flex;
  370. align-items: center;
  371. justify-content: space-between;
  372. margin-bottom: 15px;
  373. .top-left {
  374. height: 100%;
  375. display: flex;
  376. align-items: center;
  377. i {
  378. background-color: #40d5ec;
  379. height: 45%;
  380. width: 5px;
  381. margin-right: 5px;
  382. }
  383. }
  384. }
  385. .status{
  386. display: inline-block;
  387. width: 15px;
  388. height: 15px;
  389. border-radius: 50%;
  390. background: red;
  391. margin-left: 5px;
  392. }
  393. </style>