placeRegisterList.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  1. <template>
  2. <van-nav-bar
  3. fixed
  4. title="场所管理"
  5. left-text=""
  6. left-arrow
  7. @click-left="onClickLeft"
  8. @click-right="onClickright"
  9. :style="{ 'background-color': selectColor }"
  10. >
  11. <template #right>
  12. <van-icon name="plus" size="18" />
  13. </template>
  14. </van-nav-bar>
  15. <div class="main">
  16. <!-- <van-search
  17. v-model="searchName"
  18. shape="round"
  19. show-action
  20. input-align="center"
  21. label="场所名称"
  22. placeholder="请输入场所名称"
  23. >
  24. <template #action>
  25. <div @click="search">搜索</div>
  26. </template>
  27. </van-search> -->
  28. <div class="search">
  29. <div class="box1">
  30. <van-dropdown-menu>
  31. <van-dropdown-item v-model="value1" :options="option1" />
  32. <van-dropdown-item v-model="value2" :options="option2" />
  33. </van-dropdown-menu>
  34. </div>
  35. <div class="box2">
  36. <van-search
  37. v-model="value"
  38. show-action
  39. label="场所名称"
  40. placeholder="请输入场所名称"
  41. >
  42. <template #action>
  43. <div @click="search1">搜索</div>
  44. </template>
  45. </van-search>
  46. </div>
  47. </div>
  48. <van-pull-refresh
  49. v-if="show == false"
  50. v-model="refreshing"
  51. @refresh="onRefresh"
  52. >
  53. <van-list
  54. v-model:loading="loading"
  55. :finished="finished"
  56. finished-text="没有更多了"
  57. @load="onLoad"
  58. >
  59. <van-swipe-cell v-for="item in list" :key="item">
  60. <div class="list-item" @click="gotoplaceRegister(item.id)">
  61. <div class="item_top">
  62. <div class="item_top_left">
  63. {{ item.name }}
  64. </div>
  65. <div class="item_top_right">
  66. <span v-if="item.religiousType == 1">伊斯兰教</span>
  67. <span v-if="item.religiousType == 2">基督教</span>
  68. <span v-if="item.religiousType == 3">天主教</span>
  69. <span v-if="item.religiousType == 4">佛教</span>
  70. <span v-if="item.religiousType == 5">道教</span>
  71. </div>
  72. </div>
  73. <div class="item_center">
  74. {{ item.place }}
  75. </div>
  76. <div class="item_down">
  77. <div class="item_down_left">
  78. {{ item.contact }}
  79. </div>
  80. <div class="item_down_right">
  81. {{ item.contactNumber }}
  82. </div>
  83. </div>
  84. </div>
  85. </van-swipe-cell>
  86. </van-list>
  87. </van-pull-refresh>
  88. <van-pull-refresh
  89. v-if="show == true"
  90. v-model="refreshing"
  91. @refresh="onRefresh"
  92. >
  93. <van-list
  94. v-model:loading="loading"
  95. :finished="finished"
  96. finished-text="没有更多了"
  97. @load="search"
  98. >
  99. <van-swipe-cell v-for="item in searchList" :key="item">
  100. <div class="list-item" @click="gotoplaceRegister(item.id)">
  101. <div class="item_top">
  102. <div class="item_top_left">
  103. {{ item.name }}
  104. </div>
  105. <div class="item_top_right">
  106. <span v-if="item.religiousType == 1">伊斯兰教</span>
  107. <span v-if="item.religiousType == 2">基督教</span>
  108. <span v-if="item.religiousType == 3">天主教</span>
  109. <span v-if="item.religiousType == 4">佛教</span>
  110. <span v-if="item.religiousType == 5">道教</span>
  111. </div>
  112. </div>
  113. <div class="item_center">
  114. {{ item.place }}
  115. </div>
  116. <div class="item_down">
  117. <div class="item_down_left">
  118. {{ item.contact }}
  119. </div>
  120. <div class="item_down_right">
  121. {{ item.contactNumber }}
  122. </div>
  123. </div>
  124. </div>
  125. </van-swipe-cell>
  126. </van-list>
  127. </van-pull-refresh>
  128. </div>
  129. </template>
  130. <script>
  131. import { onMounted, ref } from "vue";
  132. import { useRouter } from "vue-router";
  133. import tools from "@/api/sys/tools";
  134. import placePerson from "@/api/placePerson/placePerson";
  135. import PlaceRegister from "@/api/placeRegister/placeRegister";
  136. export default {
  137. setup() {
  138. //暂时列表数据
  139. const list = ref([]);
  140. const searchForm = ref({
  141. religiousType: "",
  142. name: "",
  143. filingNo: "",
  144. contact: "",
  145. place: "",
  146. siteType: "",
  147. constructionStage: "",
  148. nature: "",
  149. state: "",
  150. createBy: {
  151. id: "",
  152. },
  153. });
  154. // 导航栏颜色
  155. const selectColor = ref(window.localStorage.getItem("MZ_COLOR"));
  156. //返回取消按钮
  157. const onClickLeft = () => {
  158. history.back();
  159. };
  160. //搜索事件
  161. const show = ref(false);
  162. const searchList = ref([]);
  163. const search1 = () => {
  164. searchList.value = [];
  165. search();
  166. }
  167. const search = () => {
  168. loading.value = true;
  169. finished.value = false;
  170. // searchList.value = [];
  171. if (value2.value == 0) {
  172. show.value = true;
  173. new PlaceRegister()
  174. .searchlist({
  175. current: index + 1,
  176. size: 11,
  177. name: value.value,
  178. address: value1.value,
  179. })
  180. .then(({ records, pages }) => {
  181. searchList.value = searchList.value.concat(records);
  182. // 加载状态结束
  183. loading.value = false;
  184. if (index + 1 >= pages) {
  185. finished.value = true;
  186. }
  187. index++;
  188. });
  189. } else {
  190. show.value = true;
  191. new PlaceRegister()
  192. .searchlist({
  193. current: index + 1,
  194. size: 11,
  195. name: value.value,
  196. address: value1.value,
  197. religiousType: value2.value,
  198. })
  199. .then(({ records, pages }) => {
  200. searchList.value = searchList.value.concat(records);
  201. // 加载状态结束
  202. loading.value = false;
  203. if (index + 1 >= pages) {
  204. finished.value = true;
  205. }
  206. index++;
  207. });
  208. }
  209. };
  210. const value = ref("");
  211. const value1 = ref("");
  212. const value2 = ref(0);
  213. const option1 = ref([]);
  214. const option2 = [
  215. { text: "教别", value: 0 },
  216. { text: "伊斯兰教", value: 1 },
  217. { text: "基督教", value: 2 },
  218. { text: "天主教", value: 3 },
  219. { text: "佛教", value: 4 },
  220. { text: "道教", value: 5 },
  221. ];
  222. onMounted(() => {
  223. getUser();
  224. });
  225. const getUser = () => {
  226. let addressList = [];
  227. let user = localStorage.getItem("MZ_USER");
  228. new tools().treeData().then((res) => {
  229. addressList.push(res[0]);
  230. res[0].children.forEach((item) => {
  231. addressList.push(item);
  232. });
  233. });
  234. let userArea = "";
  235. new placePerson().userList({ loginName: user }).then((res1) => {
  236. let data = res1.records[0];
  237. userArea = data.areaDTO;
  238. addressList.forEach((item) => {
  239. if (item.id == userArea.code) {
  240. value1.value = item.code;
  241. localStorage.setItem("address", item.code);
  242. option1.value.push({
  243. text: item.name,
  244. value: item.code,
  245. });
  246. item.children.forEach((item1) => {
  247. option1.value.push({
  248. text: item1.name,
  249. value: item1.code,
  250. });
  251. });
  252. }
  253. });
  254. });
  255. };
  256. //跳转
  257. let router = useRouter();
  258. //进入场所录入页面
  259. const onClickright = () => {
  260. router.push("/placeRegister");
  261. };
  262. //进入地点详情页面
  263. const gotoplaceRegister = (item) => {
  264. var data = JSON.stringify(item);
  265. router.push({
  266. path: "/placeRegisterInfo",
  267. query: { id: data },
  268. });
  269. };
  270. const loading = ref(false);
  271. const finished = ref(false);
  272. const refreshing = ref(false);
  273. let index = 0;
  274. const onLoad = () => {
  275. loading.value = true;
  276. finished.value = false;
  277. let address = localStorage.getItem("address");
  278. // 异步更新数据
  279. new PlaceRegister()
  280. .searchlist({
  281. current: index + 1,
  282. size: 11,
  283. address: address,
  284. })
  285. .then(({ records, pages }) => {
  286. list.value = list.value.concat(records);
  287. // 加载状态结束
  288. loading.value = false;
  289. if (index + 1 >= pages) {
  290. finished.value = true;
  291. }
  292. index++;
  293. });
  294. };
  295. const onRefresh = () => {
  296. // 清空列表数据
  297. finished.value = false;
  298. // 重新加载数据
  299. // 将 loading 设置为 true,表示处于加载状态
  300. loading.value = true;
  301. onLoad();
  302. };
  303. return {
  304. //返回取消按钮
  305. onClickLeft,
  306. //进入添加页面
  307. onClickright,
  308. //背景色
  309. selectColor,
  310. searchForm,
  311. list,
  312. loading,
  313. finished,
  314. refreshing,
  315. onLoad,
  316. onRefresh,
  317. //搜索
  318. search,
  319. gotoplaceRegister,
  320. show,
  321. searchList,
  322. value,
  323. value1,
  324. value2,
  325. option1,
  326. option2,
  327. search1,
  328. };
  329. },
  330. };
  331. </script>
  332. <style lang='less'>
  333. body,
  334. html {
  335. margin: 0;
  336. padding: 0;
  337. background-color: #f2f2f2;
  338. }
  339. .main {
  340. .list-item {
  341. background-color: #fff;
  342. padding: 10px;
  343. margin-bottom: 5px;
  344. overflow: hidden;
  345. .item_top {
  346. width: 100%;
  347. overflow: hidden;
  348. .item_top_left {
  349. float: left;
  350. width: 80%;
  351. font-size: 16px;
  352. font-weight: 700;
  353. }
  354. .item_top_right {
  355. float: right;
  356. width: 20%;
  357. font-size: 16px;
  358. color: #000000;
  359. }
  360. }
  361. .item_center {
  362. width: 100%;
  363. font-size: 16px;
  364. color: #a2a2a2;
  365. text-align: left;
  366. padding: 10px 0;
  367. overflow: hidden;
  368. }
  369. .item_down {
  370. overflow: hidden;
  371. width: 100%;
  372. font-size: 16px;
  373. border-bottom: 1px solid #f5f5f5;
  374. .item_down_left {
  375. width: 70%;
  376. float: left;
  377. color: #000000;
  378. }
  379. .item_down_right {
  380. width: 30%;
  381. text-align: center;
  382. float: left;
  383. }
  384. }
  385. }
  386. }
  387. </style>