add.vue 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. <template>
  2. <view class="container">
  3. <!-- 基本信息区域 -->
  4. <view class="section-title">基本信息</view>
  5. <view class="section">
  6. <!-- 变更理由(下拉选择) -->
  7. <view class="form-item">
  8. <view class="label required">变更理由</view>
  9. <picker class="picker" mode="selector" :range="reasonList" @change="handlePickerChange('changeReason')">
  10. <view class="picker-content">
  11. <view class="picker-text">{{ selected.changeReason || '请选择' }}</view>
  12. <uni-icons type="arrowdown" size="24" color="#999"></uni-icons>
  13. </view>
  14. </picker>
  15. </view>
  16. <!-- 地块名称(输入框) -->
  17. <view class="form-item">
  18. <view class="label required">地块名称</view>
  19. <input class="input" type="text" v-model="form.landName" placeholder="请输入" />
  20. </view>
  21. <!-- 实测面积(输入框+单位) -->
  22. <view class="form-item">
  23. <view class="label required">实测面积</view>
  24. <view class="input-unit-wrap">
  25. <input class="input" type="number" v-model="form.area" placeholder="请输入" />
  26. <view class="unit">亩</view>
  27. </view>
  28. </view>
  29. <!-- 所有权性质(下拉选择) -->
  30. <view class="form-item">
  31. <view class="label required">所有权性质</view>
  32. <picker class="picker" mode="selector" :range="ownershipList" @change="handlePickerChange('ownership')">
  33. <view class="picker-content">
  34. <view class="picker-text">{{ selected.ownership || '请选择' }}</view>
  35. <uni-icons type="arrowdown" size="24" color="#999"></uni-icons>
  36. </view>
  37. </picker>
  38. </view>
  39. <!-- 地块类别(下拉选择) -->
  40. <view class="form-item">
  41. <view class="label required">地块类别</view>
  42. <picker class="picker" mode="selector" :range="landTypeList" @change="handlePickerChange('landType')">
  43. <view class="picker-content">
  44. <view class="picker-text">{{ selected.landType || '请选择' }}</view>
  45. <uni-icons type="arrowdown" size="24" color="#999"></uni-icons>
  46. </view>
  47. </picker>
  48. </view>
  49. <!-- 利用类型(下拉选择) -->
  50. <view class="form-item">
  51. <view class="label required">利用类型</view>
  52. <picker class="picker" mode="selector" :range="useTypeList" @change="handlePickerChange('useType')">
  53. <view class="picker-content">
  54. <view class="picker-text">{{ selected.useType || '请选择' }}</view>
  55. <uni-icons type="arrowdown" size="24" color="#999"></uni-icons>
  56. </view>
  57. </picker>
  58. </view>
  59. <!-- 地力等级(下拉选择) -->
  60. <view class="form-item">
  61. <view class="label required">地力等级</view>
  62. <picker class="picker" mode="selector" :range="soilLevelList" @change="handlePickerChange('soilLevel')">
  63. <view class="picker-content">
  64. <view class="picker-text">{{ selected.soilLevel || '请选择' }}</view>
  65. <uni-icons type="arrowdown" size="24" color="#999"></uni-icons>
  66. </view>
  67. </picker>
  68. </view>
  69. <!-- 土地用途(下拉选择) -->
  70. <view class="form-item">
  71. <view class="label required">土地用途</view>
  72. <picker class="picker" mode="selector" :range="landUseList" @change="handlePickerChange('landUse')">
  73. <view class="picker-content">
  74. <view class="picker-text">{{ selected.landUse || '请选择' }}</view>
  75. <uni-icons type="arrowdown" size="24" color="#999"></uni-icons>
  76. </view>
  77. </picker>
  78. </view>
  79. <!-- 基本农田(下拉选择) -->
  80. <view class="form-item">
  81. <view class="label required">基本农田</view>
  82. <picker class="picker" mode="selector" :range="basicFarmlandList" @change="handlePickerChange('basicFarmland')">
  83. <view class="picker-content">
  84. <view class="picker-text">{{ selected.basicFarmland || '请选择' }}</view>
  85. <uni-icons type="arrowdown" size="24" color="#999"></uni-icons>
  86. </view>
  87. </picker>
  88. </view>
  89. <!-- 地块东至(输入框) -->
  90. <view class="form-item">
  91. <view class="label required">地块东至</view>
  92. <input class="input" type="text" v-model="form.east" placeholder="请输入" />
  93. </view>
  94. <!-- 地块西至(输入框) -->
  95. <view class="form-item">
  96. <view class="label required">地块西至</view>
  97. <input class="input" type="text" v-model="form.west" placeholder="请输入" />
  98. </view>
  99. <!-- 地块南至(输入框) -->
  100. <view class="form-item">
  101. <view class="label required">地块南至</view>
  102. <input class="input" type="text" v-model="form.south" placeholder="请输入" />
  103. </view>
  104. <!-- 地块北至(输入框) -->
  105. <view class="form-item">
  106. <view class="label required">地块北至</view>
  107. <input class="input" type="text" v-model="form.north" placeholder="请输入" />
  108. </view>
  109. <!-- 范围选择 -->
  110. <view class="form-item" @click="handleRangeSelect">
  111. <view class="label">范围选择</view>
  112. <view class="link-text">在地图上打点框选择大致范围</view>
  113. </view>
  114. <!-- 备注信息(文本域) -->
  115. <view class="form-item">
  116. <view class="label">备注信息</view>
  117. <textarea class="textarea" v-model="form.remark" placeholder="请输入"></textarea>
  118. </view>
  119. </view>
  120. <!-- 图片信息区域 -->
  121. <view class="section">
  122. <view class="section-title">图片信息</view>
  123. <view class="form-item">
  124. <view class="label">证明材料</view>
  125. <view class="upload-area" @click="handleUpload">
  126. <view class="upload-icon">+</view>
  127. </view>
  128. </view>
  129. </view>
  130. <!-- 确定按钮 -->
  131. <button class="confirm-btn" @click="handleConfirm">确定</button>
  132. </view>
  133. </template>
  134. <script setup>
  135. import { ref, reactive } from 'vue';
  136. import uniIcons from '@dcloudio/uni-ui/lib/uni-icons/uni-icons.vue'; // 引入uni-icons
  137. // 表单数据
  138. const form = reactive({
  139. landName: '',
  140. area: '',
  141. east: '',
  142. west: '',
  143. south: '',
  144. north: '',
  145. remark: ''
  146. });
  147. // 下拉选择数据源
  148. const reasonList = ref(['变更理由1', '变更理由2']);
  149. const ownershipList = ref(['集体土地所有权', '国有土地所有权']);
  150. const landTypeList = ref(['其它集体土地', '宅基地']);
  151. const useTypeList = ref(['旱地', '水田']);
  152. const soilLevelList = ref(['一等地', '二等地']);
  153. const landUseList = ref(['种植业', '林业']);
  154. const basicFarmlandList = ref(['是', '否']);
  155. // 选中的下拉值
  156. const selected = reactive({
  157. changeReason: '',
  158. ownership: '',
  159. landType: '',
  160. useType: '',
  161. soilLevel: '',
  162. landUse: '',
  163. basicFarmland: ''
  164. });
  165. // 下拉选择事件
  166. const handlePickerChange = (key) => (e) => {
  167. const value = e.target.value;
  168. switch (key) {
  169. case 'changeReason':
  170. selected.changeReason = reasonList.value[value];
  171. break;
  172. case 'ownership':
  173. selected.ownership = ownershipList.value[value];
  174. break;
  175. case 'landType':
  176. selected.landType = landTypeList.value[value];
  177. break;
  178. case 'useType':
  179. selected.useType = useTypeList.value[value];
  180. break;
  181. case 'soilLevel':
  182. selected.soilLevel = soilLevelList.value[value];
  183. break;
  184. case 'landUse':
  185. selected.landUse = landUseList.value[value];
  186. break;
  187. case 'basicFarmland':
  188. selected.basicFarmland = basicFarmlandList.value[value];
  189. break;
  190. }
  191. };
  192. // 范围选择事件
  193. const handleRangeSelect = () => {
  194. uni.showToast({ title: '跳转到地图选择页面', icon: 'none' });
  195. };
  196. // 上传证明材料
  197. const handleUpload = () => {
  198. uni.chooseImage({
  199. count: 1,
  200. success: () => uni.showToast({ title: '选择图片成功', icon: 'success' })
  201. });
  202. };
  203. // 确定按钮事件
  204. const handleConfirm = () => {
  205. // 可添加表单校验逻辑
  206. uni.showToast({ title: '提交成功', icon: 'success' });
  207. };
  208. </script>
  209. <style scoped>
  210. .container {
  211. padding: 16rpx;
  212. background-color: #f8f9fa;
  213. min-height: 100vh;
  214. box-sizing: border-box;
  215. }
  216. .section {
  217. background-color: #fff;
  218. border-radius: 12rpx;
  219. padding: 20rpx;
  220. margin-bottom: 20rpx;
  221. }
  222. .section-title {
  223. font-size: 32rpx;
  224. font-weight: bold;
  225. margin-bottom: 20rpx;
  226. }
  227. .form-item {
  228. display: flex;
  229. align-items: center;
  230. margin-bottom: 24rpx;
  231. }
  232. .label {
  233. width: 200rpx;
  234. font-size: 28rpx;
  235. }
  236. .required::after {
  237. content: '*';
  238. color: #ff3333;
  239. margin-left: 4rpx;
  240. }
  241. /* 输入框样式 */
  242. .input {
  243. flex: 1;
  244. height: 60rpx;
  245. padding: 0 12rpx;
  246. border: 1px solid #eee;
  247. border-radius: 8rpx;
  248. font-size: 28rpx;
  249. }
  250. /* 带单位的输入框容器 */
  251. .input-unit-wrap {
  252. flex: 1;
  253. display: flex;
  254. align-items: center;
  255. }
  256. .unit {
  257. margin-left: 8rpx;
  258. font-size: 28rpx;
  259. color: #666;
  260. }
  261. /* 下拉选择器样式 */
  262. .picker {
  263. flex: 1;
  264. text-align: right;
  265. }
  266. .picker-content {
  267. display: flex;
  268. align-items: center;
  269. justify-content: flex-end;
  270. gap: 8rpx;
  271. }
  272. .picker-text {
  273. font-size: 28rpx;
  274. color: #333;
  275. }
  276. /* 链接文本样式 */
  277. .link-text {
  278. flex: 1;
  279. text-align: right;
  280. font-size: 28rpx;
  281. color: #007bff;
  282. }
  283. /* 文本域样式 */
  284. .textarea {
  285. flex: 1;
  286. height: 160rpx;
  287. padding: 12rpx;
  288. border: 1px solid #eee;
  289. border-radius: 8rpx;
  290. font-size: 28rpx;
  291. }
  292. /* 上传区域样式 */
  293. .upload-area {
  294. width: 120rpx;
  295. height: 120rpx;
  296. border: 1px dashed #ccc;
  297. border-radius: 8rpx;
  298. display: flex;
  299. align-items: center;
  300. justify-content: center;
  301. }
  302. .upload-icon {
  303. font-size: 48rpx;
  304. color: #999;
  305. }
  306. /* 确定按钮样式 */
  307. .confirm-btn {
  308. width: 90%;
  309. height: 80rpx;
  310. line-height: 80rpx;
  311. background-color: #007bff;
  312. color: #fff;
  313. border-radius: 8rpx;
  314. font-size: 32rpx;
  315. margin: 0 auto;
  316. display: block;
  317. }
  318. </style>