placeRegister.vue 15 KB

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