placeRegister.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485
  1. <template>
  2. <van-nav-bar fixed title="场所录入" left-arrow @click-left="onClickLeft" :style="{ 'background-color': selectColor }"/>
  3. <div class="main">
  4. <p class="title">宗教场所录入</p>
  5. <div class="formArea">
  6. <p class="miniTitle">基础信息</p>
  7. <van-cell-group>
  8. <van-field
  9. v-model="placeActivity.placeData.religiousName"
  10. readonly
  11. label="宗教教别:"
  12. name="validator"
  13. placeholder="请选择宗教"
  14. input-align="right"
  15. right-icon="arrow-down"
  16. @click="showPicker = true"
  17. :rules="[{ validator, message: '宗教教别不能为空' }]"
  18. />
  19. <van-popup v-model:show="showPicker" round position="bottom">
  20. <van-picker
  21. title="宗教类型"
  22. :columns="places"
  23. @cancel="showPicker = false"
  24. @confirm="getPlace"
  25. />
  26. </van-popup>
  27. </van-cell-group>
  28. <van-cell-group>
  29. <van-field
  30. v-model="placeActivity.placeData.name"
  31. center
  32. label="场所名称:"
  33. placeholder="请填写场所名称"
  34. input-align="right"
  35. />
  36. </van-cell-group>
  37. <van-cell-group>
  38. <van-field
  39. v-model="placeActivity.placeData.contact"
  40. center
  41. label="场所联系人"
  42. placeholder="请填写场所联系人"
  43. input-align="right"
  44. />
  45. </van-cell-group>
  46. <van-cell-group>
  47. <van-field
  48. v-model="placeActivity.placeData.contactNumber"
  49. center
  50. label="联系电话"
  51. placeholder="请填写联系电话"
  52. input-align="right"
  53. />
  54. </van-cell-group>
  55. <van-cell-group>
  56. <van-field
  57. v-model="placeActivity.placeData.placeSelectName"
  58. center
  59. readonly
  60. label="场所地点"
  61. placeholder="请填场所地点"
  62. input-align="right"
  63. right-icon="arrow-down"
  64. @click="showPlace1 = true"
  65. />
  66. <van-popup v-model:show="showPlace1" round position="bottom">
  67. <van-picker
  68. title="场所地点"
  69. :columns="options"
  70. :columns-field-names="customFieldName"
  71. @cancel="showPlace1 = false"
  72. @confirm="getPlace1"
  73. />
  74. </van-popup>
  75. </van-cell-group>
  76. <van-cell-group>
  77. <van-field
  78. v-model="placeActivity.placeData.place"
  79. center
  80. label="详细场所"
  81. placeholder="请填写详细场所"
  82. input-align="right"
  83. right-icon="location"
  84. />
  85. </van-cell-group>
  86. <van-cell-group>
  87. <van-field
  88. v-model="placeActivity.siteType"
  89. readonly
  90. label="场所类型"
  91. placeholder="请选择场所类型"
  92. input-align="right"
  93. right-icon="arrow-down"
  94. @click="showPicker1 = true"
  95. />
  96. <van-popup v-model:show="showPicker1" round position="bottom">
  97. <van-picker
  98. title="场所类型"
  99. :columns="placeType"
  100. @cancel="showPicker1 = false"
  101. @confirm="getplaceType"
  102. />
  103. </van-popup>
  104. </van-cell-group>
  105. <van-cell-group>
  106. <van-field
  107. v-model="placeActivity.constructionStage"
  108. readonly
  109. label="场所建设阶段"
  110. placeholder="请选择场所建设阶段"
  111. input-align="right"
  112. right-icon="arrow-down"
  113. @click="showPicker2 = true"
  114. />
  115. <van-popup v-model:show="showPicker2" round position="bottom">
  116. <van-picker
  117. title="场所建设阶段"
  118. :columns="construction"
  119. @cancel="showPicker2 = false"
  120. @confirm="getConstruction"
  121. />
  122. </van-popup>
  123. </van-cell-group>
  124. <van-cell-group>
  125. <van-field
  126. v-model="placeActivity.nature"
  127. readonly
  128. label="场所性质"
  129. placeholder="请选择场所性质"
  130. input-align="right"
  131. right-icon="arrow-down"
  132. @click="showPicker3 = true"
  133. />
  134. <van-popup v-model:show="showPicker3" round position="bottom">
  135. <van-picker
  136. title="场所性质选择"
  137. :columns="property"
  138. @cancel="showPicker3 = false"
  139. @confirm="getproperty"
  140. />
  141. </van-popup>
  142. </van-cell-group>
  143. <van-cell-group>
  144. <van-field
  145. v-model="placeActivity.religiousDeptManaUserName"
  146. center
  147. label="宗教管理人员"
  148. placeholder="请填写宗教管理人员"
  149. input-align="right"
  150. right-icon="arrow-down"
  151. @click="showPerson = true"
  152. />
  153. <van-dialog
  154. v-model:show="showPerson"
  155. title="宗教部门管理人员"
  156. show-cancel-button
  157. @confirm="reselected"
  158. >
  159. <manage-list
  160. @selected="selected"
  161. :type="0"
  162. :placeAddress="placeAddress"
  163. ></manage-list>
  164. </van-dialog>
  165. </van-cell-group>
  166. <van-cell-group>
  167. <van-field
  168. v-model="placeActivity.securityDeptManaUserName"
  169. center
  170. label="公安管理人员"
  171. placeholder="请填写公安管理人员"
  172. input-align="right"
  173. right-icon="arrow-down"
  174. @click="showReport = true"
  175. />
  176. <van-dialog
  177. v-model:show="showReport"
  178. title="公安部门管理人员"
  179. show-cancel-button
  180. @confirm="reselected2"
  181. >
  182. <manage-list-2
  183. @selected2="selected2"
  184. :placeAddress="placeAddress"
  185. ></manage-list-2>
  186. </van-dialog>
  187. </van-cell-group>
  188. <van-cell-group>
  189. <van-field
  190. v-model="placeActivity.placeData.peopleThreshold"
  191. center
  192. label="活动人数:"
  193. placeholder="请填写场所活动人数"
  194. input-align="right"
  195. />
  196. </van-cell-group>
  197. <van-cell-group>
  198. <van-field name="uploader" label-align="top" label="场所内外景照片:">
  199. <template #input>
  200. <van-uploader
  201. v-model="fileList"
  202. :after-read="afterRead1"
  203. :max-count="6"
  204. capture="camera"
  205. accept=""
  206. :before-delete="fjdelete"
  207. >
  208. </van-uploader>
  209. </template>
  210. </van-field>
  211. </van-cell-group>
  212. </div>
  213. <div class="subbtn">
  214. <van-button type="primary" @click="submit">提交</van-button>
  215. <van-button @click="onClickLeft" type="default" hairline>取消</van-button>
  216. </div>
  217. </div>
  218. </template>
  219. <script>
  220. import { reactive, ref } from "vue";
  221. import ManageList from "../placeManage/ManageList.vue";
  222. import ManageList2 from "../placeManage/ManageList2.vue";
  223. import PlaceRegister from "@/api/placeRegister/placeRegister";
  224. import tools from "@/api/sys/tools";
  225. export default {
  226. components: { ManageList, ManageList2 },
  227. setup() {
  228. const onClickLeft = () => {
  229. history.back();
  230. };
  231. // 导航栏颜色
  232. const selectColor = ref(window.localStorage.getItem("MZ_COLOR"));
  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. selectColor
  455. };
  456. },
  457. };
  458. </script>
  459. <style lang="less">
  460. .subbtn {
  461. margin: 20px;
  462. text-align: center;
  463. }
  464. .subbtn .van-button {
  465. width: 40%;
  466. margin: 5px;
  467. }
  468. .van-uploader .van-button {
  469. border: none;
  470. color: #36a7f3;
  471. top: -4px;
  472. }
  473. .van-radio {
  474. margin-right: 10px;
  475. }
  476. </style>