informationInfo-warranty-list.vue 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. <template>
  2. <div>
  3. <el-breadcrumb separator=">">
  4. <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
  5. <el-breadcrumb-item>
  6. <a href="#">物业管理</a>
  7. </el-breadcrumb-item>
  8. <el-breadcrumb-item>
  9. <a href="/informationInfo">报修管理</a>
  10. </el-breadcrumb-item>
  11. </el-breadcrumb>
  12. <el-divider></el-divider>
  13. <!--
  14. 要resetFields起作用,必须配置:model和prop
  15. -->
  16. <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
  17. <el-form-item label="报修人" prop="ownerName">
  18. <el-input type="text" size="mini" v-model="queryModel.ownerName"></el-input>
  19. </el-form-item>
  20. <el-form-item label="提交时间" prop="createTimeRanges">
  21. <el-date-picker
  22. size="mini"
  23. v-model="queryModel.createTimeRanges"
  24. type="daterange"
  25. range-separator="至"
  26. start-placeholder="开始日期"
  27. end-placeholder="结束日期"
  28. value-format="yyyy-MM-dd"
  29. ></el-date-picker>
  30. </el-form-item>
  31. <el-form-item label="报修状态" prop="status">
  32. <el-select v-model="queryModel.status" size="mini">
  33. <el-option v-for="item in statusList" :key="item.value" :label="item.name" :value="item.value"></el-option>
  34. </el-select>
  35. </el-form-item>
  36. <el-form-item>
  37. <el-button
  38. type="primary"
  39. size="mini"
  40. icon="ios-search"
  41. @click="changePage(1)"
  42. :loading="loading"
  43. >查询</el-button>&nbsp;
  44. <el-button
  45. type="info"
  46. size="mini"
  47. style="margin-left: 8px"
  48. @click="handleReset('queryForm')"
  49. >重置</el-button>&nbsp;
  50. </el-form-item>
  51. </el-form>
  52. <el-divider></el-divider>
  53. <el-row class="button-group"></el-row>
  54. <el-table
  55. :data="tableData"
  56. style="min-height:400px;"
  57. v-loading="loading"
  58. stripe
  59. @sort-change="sortChange"
  60. @selection-change="handleSelectionChange"
  61. >
  62. <el-table-column prop="name" sort-by="name_" label="业主名称" width="100"></el-table-column>
  63. <el-table-column prop="phone" sort-by="phone" label="手机号码" width="130"></el-table-column>
  64. <el-table-column prop="community" sort-by="community_" label="报修人房号" width="120"></el-table-column>
  65. <el-table-column prop="content" sort-by="content_" label="报修内容" width="220"></el-table-column>
  66. <el-table-column prop="createTime" sort-by="create_time" label="提交时间" width="150"></el-table-column>
  67. <el-table-column prop="status" sort-by="status_" label="报修状态" width="180">
  68. <template slot-scope="scope">
  69. <p v-if="scope.row.status=='0'">待解决</p>
  70. <p v-if="scope.row.status=='1'">已解决</p>
  71. <p v-if="scope.row.status=='2'">已结束</p>
  72. </template>
  73. </el-table-column>
  74. <el-table-column prop="returnContent" sort-by="return_content" label="解决方案" width="220"></el-table-column>
  75. <el-table-column prop="returnTime" sort-by="return_time" label="解决时间" width="150"></el-table-column>
  76. <el-table-column label="操作" width="220" fixed="right">
  77. <template slot-scope="{row}">
  78. <el-button v-if="row.status=='2'" size="mini" type="success" disabled>已解决</el-button>
  79. <el-button v-else-if="row.status=='1'" size="mini" type="success" @click="handleEdit(row)">已回复</el-button>
  80. <el-button v-else size="mini" type="success" @click="handleEdit(row)">提交解决方案</el-button>
  81. <el-button v-if="row.status=='2'" size="mini" type="danger" disabled>结束</el-button>
  82. <el-button v-else size="mini" type="danger" @click="handleFinished(row)">结束</el-button>
  83. </template>
  84. </el-table-column>
  85. </el-table>
  86. <el-pagination
  87. :current-page.sync="pageIndex"
  88. :total="totalElements"
  89. :page-sizes="pageSizeList"
  90. @current-change="changePage"
  91. @size-change="pageSizeChange"
  92. layout="total, sizes, prev, pager, next, jumper"
  93. ></el-pagination>
  94. <informationInfo-detail
  95. v-if="showModal"
  96. :businessKey="businessKey"
  97. :title="modalTitle"
  98. @close="onDetailModalClose"
  99. ></informationInfo-detail>
  100. </div>
  101. </template>
  102. <script>
  103. import Constant from "@/constant";
  104. import InformationInfoDetail from "./informationInfo-detail";
  105. import informationInfoApi from "@/api/base/informationInfo";
  106. import NProgress from "nprogress"; // progress bar
  107. import "nprogress/nprogress.css"; // progress bar style
  108. export default {
  109. name: "BaseInformationInfoWarrantyList",
  110. data() {
  111. var self = this;
  112. return {
  113. queryModel: {
  114. id: "",
  115. createBy: "",
  116. createTime: "",
  117. updateBy: "",
  118. updateTime: "",
  119. delFlag: "",
  120. ownerName: "",
  121. community: "",
  122. content: "",
  123. status: "",
  124. returnContent: "",
  125. returnTime: "",
  126. type: "2",
  127. createTimeRanges:[],
  128. },
  129. loading: false,
  130. tableData: [],
  131. statusList:[
  132. {
  133. value:"0",
  134. name:"待解决"
  135. },
  136. {
  137. value:"1",
  138. name:"已解决"
  139. },
  140. {
  141. value:"2",
  142. name:"已结束"
  143. }
  144. ],
  145. pageIndex: 1,
  146. pageSize: 10,
  147. totalPages: 0,
  148. totalElements: 0,
  149. field: "",
  150. direction: "",
  151. pageSizeList: [10, 20, 30],
  152. multipleSelection: [],
  153. showModal: false,
  154. modalTitle: "",
  155. businessKey: ""
  156. };
  157. },
  158. methods: {
  159. changePage(pageIndex) {
  160. var self = this;
  161. self.loading = true;
  162. self.pageIndex = pageIndex;
  163. var formData = new FormData();
  164. formData.append("pageIndex", self.pageIndex);
  165. formData.append("pageSize", self.pageSize);
  166. formData.append("type", "2");
  167. formData.append("name", self.queryModel.ownerName);
  168. if(self.queryModel.createTimeRanges!=null&&self.queryModel.createTimeRanges!=""){
  169. formData.append("createTimeRanges", self.queryModel.createTimeRanges.toString());
  170. }
  171. formData.append("status", self.queryModel.status);
  172. informationInfoApi
  173. .pageList(formData)
  174. .then(function(response) {
  175. self.loading = false;
  176. var jsonData = response.data.data;
  177. self.tableData = jsonData.data;
  178. self.totalPages = jsonData.totalPages;
  179. self.totalElements = jsonData.recordsTotal;
  180. })
  181. .catch(error => {
  182. self.loading = false;
  183. // self.$message.error(error + "");
  184. });
  185. },
  186. pageSizeChange(pageSize) {
  187. this.pageSize = pageSize;
  188. },
  189. sortChange(data) {
  190. this.field = data.column.field;
  191. this.direction = data.order;
  192. this.changePage(this.pageIndex);
  193. },
  194. handleSelectionChange(val) {
  195. this.multipleSelection = val;
  196. },
  197. handleReset(name) {
  198. this.$refs[name].resetFields();
  199. },
  200. handleAdd() {
  201. this.modalTitle = "新增";
  202. this.businessKey = "";
  203. this.showModal = true;
  204. },
  205. handleEdit(record) {
  206. this.modalTitle = "编辑";
  207. this.businessKey = record.id;
  208. this.showModal = true;
  209. },
  210. handleFinished(record){
  211. var self = this;
  212. self
  213. .$confirm("是否结束报修?", "提示", {
  214. confirmButtonText: "确定",
  215. cancelButtonText: "取消",
  216. type: "warning"
  217. })
  218. .then(() => {
  219. informationInfoApi.finished(record.id).then(function(response){
  220. var jsonData = response.data;
  221. if (jsonData.result) {
  222. self.changePage(self.pageIndex);
  223. self.$message({
  224. type: "success",
  225. message: "投诉已结束!"
  226. });
  227. }
  228. })
  229. })
  230. },
  231. handleDelete(record) {
  232. var self = this;
  233. self
  234. .$confirm("是否确认删除?", "提示", {
  235. confirmButtonText: "确定",
  236. cancelButtonText: "取消",
  237. type: "warning"
  238. })
  239. .then(() => {
  240. informationInfoApi.remove(record.id).then(function(response) {
  241. var jsonData = response.data;
  242. if (jsonData.result) {
  243. // var index = self.tableData.indexOf(record);
  244. // self.tableData.splice(index, 1);
  245. self.changePage(self.pageIndex);
  246. self.$message({
  247. type: "success",
  248. message: "删除成功!"
  249. });
  250. }
  251. });
  252. });
  253. },
  254. handleBatchDelete() {
  255. var self = this;
  256. var idList = this.multipleSelection.map(record => {
  257. return record.id;
  258. });
  259. this.$confirm("是否确认删除选中项?", "提示", {
  260. confirmButtonText: "确定",
  261. cancelButtonText: "取消",
  262. type: "warning"
  263. }).then(() => {
  264. informationInfoApi.batchRemove(idList).then(function(response) {
  265. var jsonData = response.data;
  266. if (jsonData.result) {
  267. self.changePage(self.pageIndex);
  268. self.$message({
  269. type: "success",
  270. message: "删除成功!"
  271. });
  272. }
  273. });
  274. });
  275. },
  276. onDetailModalClose(refreshed) {
  277. //保存成功后回调
  278. this.showModal = false;
  279. if (refreshed) {
  280. this.changePage(this.pageIndex);
  281. }
  282. }
  283. },
  284. mounted: function() {
  285. this.changePage(1);
  286. },
  287. components: {
  288. "informationInfo-detail": InformationInfoDetail
  289. }
  290. };
  291. </script>
  292. <style lang="scss" scoped>
  293. .el-breadcrumb {
  294. margin: 10px;
  295. line-height: 20px;
  296. }
  297. .el-divider {
  298. margin: 5px 0;
  299. }
  300. .demo-form-inline {
  301. margin-left: 10px;
  302. text-align: left;
  303. }
  304. .button-group {
  305. margin-left: 10px;
  306. text-align: left;
  307. }
  308. </style>