information.vue 8.6 KB

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