placeRegister.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497
  1. <template>
  2. <van-nav-bar
  3. fixed
  4. title="场所录入"
  5. left-arrow
  6. @click-left="onClickLeft"
  7. :style="{ 'background-color': selectColor }"
  8. />
  9. <div class="main">
  10. <div class="formArea">
  11. <p class="miniTitle">场所信息</p>
  12. <van-cell-group>
  13. <van-field
  14. v-model="placeActivity.placeData.religiousName"
  15. readonly
  16. label="宗教教别:"
  17. name="validator"
  18. placeholder="请选择宗教"
  19. input-align="right"
  20. right-icon="arrow-down"
  21. @click="showPicker = true"
  22. :rules="[{ validator, message: '宗教教别不能为空' }]"
  23. />
  24. <van-popup v-model:show="showPicker" round position="bottom">
  25. <van-picker
  26. title="宗教类型"
  27. :columns="places"
  28. @cancel="showPicker = false"
  29. @confirm="getPlace"
  30. />
  31. </van-popup>
  32. </van-cell-group>
  33. <van-cell-group>
  34. <van-field
  35. v-model="placeActivity.placeData.name"
  36. center
  37. label="场所名称:"
  38. placeholder="请填写场所名称"
  39. input-align="right"
  40. />
  41. </van-cell-group>
  42. <van-cell-group>
  43. <van-field
  44. v-model="placeActivity.placeData.contact"
  45. center
  46. label="场所联系人"
  47. placeholder="请填写场所联系人"
  48. input-align="right"
  49. />
  50. </van-cell-group>
  51. <van-cell-group>
  52. <van-field
  53. v-model="placeActivity.placeData.contactNumber"
  54. center
  55. label="联系电话"
  56. placeholder="请填写联系电话"
  57. input-align="right"
  58. />
  59. </van-cell-group>
  60. <van-cell-group>
  61. <van-field
  62. v-model="placeActivity.placeData.placeSelectName"
  63. center
  64. readonly
  65. label="场所地点"
  66. placeholder="请填场所地点"
  67. input-align="right"
  68. right-icon="arrow-down"
  69. @click="showPlace1 = true"
  70. />
  71. <van-popup v-model:show="showPlace1" round position="bottom">
  72. <van-picker
  73. title="场所地点"
  74. :columns="options"
  75. :columns-field-names="customFieldName"
  76. @cancel="showPlace1 = false"
  77. @confirm="getPlace1"
  78. />
  79. </van-popup>
  80. </van-cell-group>
  81. <van-cell-group>
  82. <van-field
  83. v-model="placeActivity.placeData.place"
  84. center
  85. label="详细场所"
  86. placeholder="请填写详细场所"
  87. input-align="right"
  88. >
  89. <template #right-icon>
  90. <van-icon name="location" @click="getLocation" />
  91. </template>
  92. </van-field>
  93. </van-cell-group>
  94. <van-cell-group>
  95. <van-field
  96. v-model="placeActivity.siteType"
  97. readonly
  98. label="场所类型"
  99. placeholder="请选择场所类型"
  100. input-align="right"
  101. right-icon="arrow-down"
  102. @click="showPicker1 = true"
  103. />
  104. <van-popup v-model:show="showPicker1" round position="bottom">
  105. <van-picker
  106. title="场所类型"
  107. :columns="placeType"
  108. @cancel="showPicker1 = false"
  109. @confirm="getplaceType"
  110. />
  111. </van-popup>
  112. </van-cell-group>
  113. <van-cell-group>
  114. <van-field
  115. v-model="placeActivity.constructionStage"
  116. readonly
  117. label="场所建设阶段"
  118. placeholder="请选择场所建设阶段"
  119. input-align="right"
  120. right-icon="arrow-down"
  121. @click="showPicker2 = true"
  122. />
  123. <van-popup v-model:show="showPicker2" round position="bottom">
  124. <van-picker
  125. title="场所建设阶段"
  126. :columns="construction"
  127. @cancel="showPicker2 = false"
  128. @confirm="getConstruction"
  129. />
  130. </van-popup>
  131. </van-cell-group>
  132. <van-cell-group>
  133. <van-field
  134. v-model="placeActivity.nature"
  135. readonly
  136. label="场所性质"
  137. placeholder="请选择场所性质"
  138. input-align="right"
  139. right-icon="arrow-down"
  140. @click="showPicker3 = true"
  141. />
  142. <van-popup v-model:show="showPicker3" round position="bottom">
  143. <van-picker
  144. title="场所性质选择"
  145. :columns="property"
  146. @cancel="showPicker3 = false"
  147. @confirm="getproperty"
  148. />
  149. </van-popup>
  150. </van-cell-group>
  151. <van-cell-group>
  152. <van-field
  153. v-model="placeActivity.religiousDeptManaUserName"
  154. center
  155. label="宗教管理人员"
  156. placeholder="请填写宗教管理人员"
  157. input-align="right"
  158. right-icon="arrow-down"
  159. @click="showPerson = true"
  160. />
  161. <van-dialog
  162. v-model:show="showPerson"
  163. title="宗教部门管理人员"
  164. show-cancel-button
  165. @confirm="reselected"
  166. >
  167. <manage-list
  168. @selected="selected"
  169. :type="0"
  170. :placeAddress="placeAddress"
  171. ></manage-list>
  172. </van-dialog>
  173. </van-cell-group>
  174. <van-cell-group>
  175. <van-field
  176. v-model="placeActivity.securityDeptManaUserName"
  177. center
  178. label="公安管理人员"
  179. placeholder="请填写公安管理人员"
  180. input-align="right"
  181. right-icon="arrow-down"
  182. @click="showReport = true"
  183. />
  184. <van-dialog
  185. v-model:show="showReport"
  186. title="公安部门管理人员"
  187. show-cancel-button
  188. @confirm="reselected2"
  189. >
  190. <manage-list-2
  191. @selected2="selected2"
  192. :placeAddress="placeAddress"
  193. ></manage-list-2>
  194. </van-dialog>
  195. </van-cell-group>
  196. <van-cell-group>
  197. <van-field
  198. v-model="placeActivity.placeData.peopleThreshold"
  199. center
  200. label="活动人数:"
  201. placeholder="请填写场所活动人数"
  202. input-align="right"
  203. />
  204. </van-cell-group>
  205. <van-cell-group>
  206. <van-field name="uploader" label-align="top" label="场所内外景照片:">
  207. <template #input>
  208. <van-uploader
  209. v-model="fileList"
  210. :after-read="afterRead1"
  211. :max-count="6"
  212. capture="camera"
  213. accept=""
  214. :before-delete="fjdelete"
  215. >
  216. </van-uploader>
  217. </template>
  218. </van-field>
  219. </van-cell-group>
  220. </div>
  221. <div class="subbtn">
  222. <van-button type="primary" @click="submit">提交</van-button>
  223. <van-button @click="onClickLeft" type="default" hairline>取消</van-button>
  224. </div>
  225. </div>
  226. </template>
  227. <script>
  228. import { reactive, ref } from "vue";
  229. import ManageList from "../ManageList.vue";
  230. import ManageList2 from "../ManageList2.vue";
  231. import PlaceRegister from "@/api/placeRegister/placeRegister";
  232. import tools from "@/api/sys/tools";
  233. export default {
  234. components: { ManageList, ManageList2 },
  235. setup() {
  236. const onClickLeft = () => {
  237. history.back();
  238. };
  239. // 导航栏颜色
  240. const selectColor = ref(window.localStorage.getItem("MZ_COLOR"));
  241. //场所录入
  242. const placeActivity = reactive({
  243. placeData: {
  244. religiousType: "", //所属宗教
  245. name: "", //场所名称
  246. contact: "", //场所联系人
  247. contactNumber: "", //联系电话
  248. placeSelectId: "", //场所地点id
  249. placeSelectName: "", //场所地点
  250. place: "", //详细场所地点
  251. siteType: "", //场所类型
  252. constructionStage: "", //场所建设阶段
  253. nature: "", //场所性质
  254. religiousDeptManaUser: "", //宗教部门管理人员id
  255. securityDeptManaUser: "", //公安部门管理人员id
  256. peopleThreshold: "", //场所活动人数
  257. approvalProcedures: "", //场所建设审批手续
  258. etiquetteSpace: "", //宗教礼仪空间(附件)
  259. filingNo: "", //场所备案号
  260. latitude: "", //经度
  261. longitude: "", //维度
  262. mainRoads: "", //出入口主要道路
  263. placeSelectType3: "",
  264. placeSelectType4: "",
  265. placeSelectType5: "",
  266. placeSelectType6: "",
  267. plan: "", //场所规划
  268. publicArea: "", //外围公共区域
  269. religiousName: "", //教别名称
  270. remake: "", //备注
  271. scenesImage: "", //内外景图片地址
  272. tyshxydm: "", //统一社会代码
  273. website: "", //网址
  274. state: "1", //状态
  275. },
  276. religiousDeptManaUserName: "", //宗教部门管理人员
  277. securityDeptManaUserName: "", //公安部门管理人员
  278. placeSelectName: "", //场所地点
  279. siteType: "", //场所类型
  280. constructionStage: "", //场所建设阶段
  281. nature: "", //场所性质
  282. });
  283. // 宗教名称
  284. const places = [
  285. { text: "伊斯兰教", value: " 1" },
  286. { text: "基督教", value: "2" },
  287. { text: "天主教", value: "3" },
  288. { text: "佛教", value: "4" },
  289. { text: "道教", value: "5" },
  290. ];
  291. let showPicker = ref(false);
  292. const getPlace = ({ selectedOptions }) => {
  293. showPicker.value = false;
  294. placeActivity.placeData.religiousType = selectedOptions[0].value;
  295. placeActivity.placeData.religiousName = selectedOptions[0].text;
  296. };
  297. // 场所类型
  298. const placeType = [
  299. { text: "线上", value: "0" },
  300. { text: "线下", value: "1" },
  301. ];
  302. let showPicker1 = ref(false);
  303. const getplaceType = ({ selectedOptions }) => {
  304. showPicker1.value = false;
  305. placeActivity.placeData.siteType = selectedOptions[0].value;
  306. placeActivity.siteType = selectedOptions[0].text;
  307. };
  308. // 场所建设
  309. const construction = [
  310. { text: "筹备", value: "0" },
  311. { text: "建设完成", value: "1" },
  312. ];
  313. let showPicker2 = ref(false);
  314. const getConstruction = ({ selectedOptions }) => {
  315. showPicker2.value = false;
  316. placeActivity.placeData.constructionStage = selectedOptions[0].value;
  317. placeActivity.constructionStage = selectedOptions[0].text;
  318. };
  319. // 场所性质
  320. const property = [
  321. { text: "固定场所", value: "0" },
  322. { text: "寺观教堂", value: "1" },
  323. ];
  324. let showPicker3 = ref(false);
  325. const getproperty = ({ selectedOptions }) => {
  326. showPicker3.value = false;
  327. placeActivity.placeData.nature = selectedOptions[0].value;
  328. placeActivity.nature = selectedOptions[0].text;
  329. };
  330. //图片上传
  331. let fileList = ref([]);
  332. let fileImg = ref([]);
  333. const afterRead1 = (file) => {
  334. new tools()
  335. .uploadFile(file, `religioussites/siteinfo/religiousSitesInfo`)
  336. .then(({ data }) => {
  337. data.name = decodeURIComponent(
  338. data.url.substring(data.url.lastIndexOf("/") + 1)
  339. );
  340. placeActivity.placeData.scenesImage += "" + data.url;
  341. fileImg.value.push(data);
  342. });
  343. };
  344. const fjdelete = (file) => {
  345. //删除文件操作
  346. for (let index = 0; index < fileList.value.length; index++) {
  347. if (file.file == fileList.value[index].file) {
  348. let delurl = fileImg.value[index].url;
  349. new tools().uploadFiledelete("", delurl).then(({ data }) => {});
  350. fileImg.value.splice(index, 1);
  351. fileList.value.splice(index, 1);
  352. }
  353. }
  354. };
  355. //详细地址定位
  356. const getLocation = () => {
  357. xm.getLocation().then((data) => {
  358. placeActivity.placeData.place = data.POIName;
  359. });
  360. };
  361. // 地区选择
  362. let placeAddress = ref("");
  363. const customFieldName = {
  364. text: "name",
  365. value: "id",
  366. };
  367. // 选项列表,children 代表子选项,支持多级嵌套
  368. const options = ref([]);
  369. // 获取地区数据树
  370. new PlaceRegister().treeDate().then((res) => {
  371. options.value.push(...res);
  372. });
  373. let showPlace1 = ref(false);
  374. const getPlace1 = ({ selectedOptions }) => {
  375. showPlace1.value = false;
  376. placeActivity.placeData.placeSelectName =
  377. selectedOptions[0].name +
  378. "/" +
  379. selectedOptions[1].name +
  380. "/" +
  381. selectedOptions[2].name;
  382. placeAddress.value =
  383. selectedOptions[0].id +
  384. "/" +
  385. selectedOptions[1].id +
  386. "/" +
  387. selectedOptions[2].id;
  388. placeActivity.placeData.placeSelectType3 = selectedOptions[0].id;
  389. placeActivity.placeData.placeSelectType4 = selectedOptions[1].id;
  390. placeActivity.placeData.placeSelectType5 = selectedOptions[2].id;
  391. placeActivity.placeData.placeSelectId = placeAddress.value;
  392. };
  393. //人员选择
  394. let showPerson = ref(false);
  395. let showReport = ref(false);
  396. let list = {
  397. value: [],
  398. type: "",
  399. };
  400. let list2 = {
  401. value: [],
  402. type: "",
  403. };
  404. const selected = (val) => {
  405. list.value = val;
  406. };
  407. const selected2 = (val) => {
  408. list2.value = val;
  409. };
  410. const reselected = () => {
  411. placeActivity.placeData.religiousDeptManaUser = list.value.id;
  412. placeActivity.religiousDeptManaUserName = list.value.name;
  413. };
  414. const reselected2 = () => {
  415. placeActivity.placeData.securityDeptManaUser = list2.value.id;
  416. placeActivity.securityDeptManaUserName = list2.value.name;
  417. };
  418. //数据提交
  419. const submit = () => {
  420. new PlaceRegister().sava(placeActivity.placeData).then((res) => {
  421. router.push({
  422. path: "/tabAll",
  423. });
  424. });
  425. };
  426. return {
  427. placeActivity,
  428. // 活动场所
  429. showPicker,
  430. places,
  431. getPlace,
  432. //场所类型
  433. showPicker1,
  434. placeType,
  435. getplaceType,
  436. //场所建设阶段
  437. showPicker2,
  438. construction,
  439. getConstruction,
  440. //场所性质
  441. showPicker3,
  442. property,
  443. getproperty,
  444. //图片上传
  445. fileList,
  446. afterRead1,
  447. //图片删除
  448. fjdelete,
  449. // 返回
  450. onClickLeft,
  451. // 详细地址定位
  452. getLocation,
  453. // 地区选择
  454. placeAddress,
  455. customFieldName,
  456. showPlace1,
  457. getPlace1,
  458. options,
  459. //人员选择
  460. showPerson,
  461. showReport,
  462. selected,
  463. selected2,
  464. reselected,
  465. reselected2,
  466. //数据提交
  467. submit,
  468. selectColor,
  469. };
  470. },
  471. };
  472. </script>
  473. <style lang="less">
  474. .subbtn {
  475. margin: 20px;
  476. text-align: center;
  477. }
  478. .subbtn .van-button {
  479. width: 40%;
  480. margin: 5px;
  481. }
  482. .van-uploader .van-button {
  483. border: none;
  484. color: #36a7f3;
  485. top: -4px;
  486. }
  487. .van-radio {
  488. margin-right: 10px;
  489. }
  490. </style>