index.vue 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896
  1. <template>
  2. <z-paging ref="paging" bgColor="#F7F7F7" safe-area-inset-bottom paging-class="paging-btm-shadow" scroll-with-animation>
  3. <template #top>
  4. <ut-navbar :title="(did && !+form?.baseInfo?.gapFlag ? '编辑基地' : '添加基地')" :fixed="false" border></ut-navbar>
  5. <view class="bg-fff mb-20">
  6. <view class="pd-5"></view>
  7. <ut-tabs v-model="activeTab" :tabs="tabs" mode="btw" @change="changeActiveTab"></ut-tabs>
  8. </view>
  9. </template>
  10. <up-form class="p-rtv" labelPosition="top" :model="form" :rules="rules" labelWidth="auto" ref="upFormRef">
  11. <!-- 基本信息 -->
  12. <view ref="baseRef" class="pd-24" id="base12345">
  13. <view class="startline-title">基本信息</view>
  14. </view>
  15. <view class="pd-24 bg-#fff mb-10">
  16. <up-alert type="primary" fontSize="24rpx" description="注意:基地不强制与品种挂钩!基地地址以行政村为界,可成片集中或相对集中,跨村则视为另一基地(连片跨村除外)。"></up-alert>
  17. <view class="pd-10"></view>
  18. <view class="h-1" id="baseTypepppp"></view>
  19. <up-form-item borderBottom label="基地类型" required prop="baseType">
  20. <view v-if="form.baseInfo.baseType" class="f-s-30 c-333 f-w-5 flex1">{{ selectDictLabel(pt_base_type, form.baseInfo.baseType) }}</view>
  21. <view v-else class="f-s-30 c-ccc f-w-4 flex1">请选择基地类型</view>
  22. </up-form-item>
  23. <!-- 基地名称 -->
  24. <view class="h-1" id="baseNamepppp"></view>
  25. <up-form-item borderBottom label="基地名称" required prop="baseInfo.baseName">
  26. <up-input v-model="form.baseInfo.baseName" placeholder="请输入基地名称" border="none" clearable></up-input>
  27. </up-form-item>
  28. <!-- 基地编号 -->
  29. <view class="h-1" id="baseCodepppp"></view>
  30. <up-form-item borderBottom label="基地编号" prop="baseInfo.baseCode">
  31. <up-input v-model="form.baseInfo.baseCode" placeholder="请输入基地编号" border="none" clearable></up-input>
  32. </up-form-item>
  33. <!-- 校验定位:建设时间 -->
  34. <view class="h-1" id="buildDatepppp"></view>
  35. <ut-datetime-picker v-model="form.baseInfo.buildDate" mode="date" dateFields="month">
  36. <up-form-item borderBottom label="建设时间" required prop="baseInfo.buildDate">
  37. <up-input v-model="form.baseInfo.buildDate" placeholder="请选择基地建设年份" border="none" clearable></up-input>
  38. </up-form-item>
  39. </ut-datetime-picker>
  40. <!-- 选择基地组织方式 -->
  41. <view class="h-1" id="orgTypepppp"></view>
  42. <ut-action-sheet v-model="form.baseInfo.orgType" :tabs="pt_org_type" title="选择基地组织方式">
  43. <up-form-item borderBottom label="基地组织方式" required prop="baseInfo.orgType">
  44. <view v-if="form.baseInfo.orgType" class="f-s-30 c-333 f-w-5 flex1">{{ selectDictLabel(pt_org_type, form.baseInfo.orgType) }}</view>
  45. <view v-else class="f-s-30 c-ccc f-w-4 flex1">请选择基地组织方式</view>
  46. <template #right>
  47. <up-icon size="22rpx" color="#2A6D52" name="arrow-down-fill"></up-icon>
  48. </template>
  49. </up-form-item>
  50. </ut-action-sheet>
  51. <!-- 选择基地负责人 -->
  52. <!-- 校验定位:基地负责人 -->
  53. <view class="h-1" id="contactIdpppp"></view>
  54. <up-form-item @click="selectCpyMember" borderBottom label="基地负责人" required prop="baseInfo.contactId">
  55. <view v-if="form.baseInfo.contactId" class="f-s-30 c-333 f-w-5 flex1">{{ form.baseInfo.contactName }}</view>
  56. <view v-else class="f-s-30 c-ccc f-w-4 flex1">请选择基地负责人</view>
  57. <template #right>
  58. <up-icon size="22rpx" color="#2A6D52" name="arrow-down-fill"></up-icon>
  59. </template>
  60. </up-form-item>
  61. <!-- 填写基地联系电话 -->
  62. <view class="h-1" id="contactTelpppp"></view>
  63. <up-form-item borderBottom label="基地联系电话" required prop="baseInfo.contactTel">
  64. <up-input v-model="form.baseInfo.contactTel" placeholder="请输入基地联系电话" border="none" clearable></up-input>
  65. </up-form-item>
  66. <!-- 是否Gap基地 -->
  67. <view class="h-1" id="gapFlagpppp"></view>
  68. <template v-if="['1', '2'].includes(form.baseInfo.baseType)">
  69. <up-form-item borderBottom label="是否为Gap基地" required prop="baseInfo.gapFlag">
  70. <up-radio-group v-model="form.baseInfo.gapFlag">
  71. <up-radio :customStyle="{ marginRight: '60rpx' }" v-for="(item, index) in yes_no" :key="index" :label="item.label" :name="item.value"></up-radio>
  72. </up-radio-group>
  73. </up-form-item>
  74. <!-- 关联的GAP获评信息 -->
  75. <template v-if="+form.baseInfo.gapFlag">
  76. <template v-if="!form.baseInfo.gapId">
  77. <up-form-item borderBottom label="关联的GAP获评信息" prop="baseInfo.gapId">
  78. <up-button @click="selectGapInfo" type="primary" text="确定" plain>
  79. <up-icon class="mr-10" name="plus" color="#37A954"></up-icon>
  80. <span>请选择要关联的GAP基地获评信息</span>
  81. </up-button>
  82. </up-form-item>
  83. </template>
  84. <template v-else>
  85. <up-form-item borderBottom label="关联的GAP获评信息" prop="baseInfo.gapId">
  86. <view class="bg-#FBFDFB pd-24 p-rtv flex1 radius-10 gap-info-card">
  87. <view class="f-s-32 f-w-500 c-#333">{{ form?.baseInfo?.gapInfo?.gapBaseName || '-' }}</view>
  88. <view class="f-s-24 c-#ccc mb-10">{{ form?.baseInfo?.gapInfo?.ratedDate }}获评</view>
  89. <view class="d-flex gap-10 flex-wrap">
  90. <view class="w-330 f-s-28">
  91. <span class="c-#666">申报品种:</span>
  92. <span class="c-#333 f-w-500">{{ form?.baseInfo?.gapInfo?.medicineName }}</span>
  93. </view>
  94. <view class="w-290 f-s-28">
  95. <span class="c-#666">基地面积:</span>
  96. <span class="c-#333 f-w-500">{{ form?.baseInfo?.gapInfo?.area }}{{ form?.baseInfo?.gapInfo?.areaUnit }}</span>
  97. </view>
  98. <view class="f-s-28">
  99. <span class="c-#666">基地地址:</span>
  100. <span class="c-#333 f-w-500">{{ form?.baseInfo?.gapInfo?.adcodeName }} {{ form?.baseInfo?.gapInfo?.address || '-' }}</span>
  101. </view>
  102. </view>
  103. <view class="card-close pd-10" @click="removeGapInfo">
  104. <up-icon name="close" size="32rpx" color="#F81242"></up-icon>
  105. </view>
  106. </view>
  107. </up-form-item>
  108. <up-form-item borderBottom label="基地具体地址" required prop="baseInfo.gapInfo.adcode">
  109. <!-- <up-input v-model="form.address" placeholder="请选择基地所在省/市/县/镇(乡)" border="none" clearable></up-input> -->
  110. <view v-if="form?.baseInfo?.gapInfo?.adcode" class="f-s-30 c-ccc f-w-5 flex1">{{ form?.baseInfo?.gapInfo?.adcodeName }} </view>
  111. <view v-else class="f-s-30 c-ccc f-w-4 flex1">请选择基地所在省/市/县/镇(乡)</view>
  112. </up-form-item>
  113. <up-form-item borderBottom prop="baseInfo.gapInfo.address">
  114. <view class="f-s-30 c-#ccc f-w-5">{{ form?.baseInfo?.gapInfo?.address || '-' }}</view>
  115. </up-form-item>
  116. <up-form-item borderBottom prop="baseInfo.gapInfo.basePic" required>
  117. <view class="flex1 ov-hd">
  118. <view class="d-flex a-c mb-10" style="margin-bottom: 5px">
  119. <view class="f-s-30 c-#666">基地范围</view>
  120. </view>
  121. <view class="bg-#ccc d-flex ov-hd p-rtv">
  122. <image class="w-full" v-if="form.baseInfo.gapInfo?.basePic" :src="form.baseInfo.gapInfo.basePic" mode="widthFix" />
  123. <image class="w-full h-380" v-else src="@/static/images/plant/base/select_base_gap.png" mode="widthFix" />
  124. </view>
  125. </view>
  126. </up-form-item>
  127. <view class="h-1" id="areaPppp"></view>
  128. <up-form-item required borderBottom label="基地面积" prop="baseInfo.gapInfo.area">
  129. <view class="f-s-30 c-#ccc f-w-5">{{ form?.baseInfo?.gapInfo?.area || '-' }}</view>
  130. <template #right>
  131. <span>{{ form.baseInfo.gapInfo.areaUnit }}</span>
  132. </template>
  133. </up-form-item>
  134. <!-- 基地经纬度 -->
  135. <view class="h-1" id="lngpppp"></view>
  136. <view class="h-1" id="latpppp"></view>
  137. <up-form-item required label="基地经纬度" class="form-item-wrap-column">
  138. <view class="d-flex" style="margin-top: -10px">
  139. <up-form-item class="flex1" prop="baseInfo.gapInfo.lng">
  140. <view class="f-s-30 c-#ccc flex1 f-w-5">{{ form?.baseInfo?.gapInfo?.lng || '-' }}</view>
  141. </up-form-item>
  142. <view class="pd-5"></view>
  143. <up-form-item class="flex1" prop="baseInfo.gapInfo.lat">
  144. <view class="f-s-30 c-#ccc flex1 f-w-5">{{ form?.baseInfo?.gapInfo?.lat || '-' }}</view>
  145. </up-form-item>
  146. </view>
  147. </up-form-item>
  148. </template>
  149. </template>
  150. </template>
  151. <template v-if="!+form.baseInfo.gapFlag && !form.baseInfo.gapId">
  152. <view class="h-1" id="adcodepppp"></view>
  153. <up-form-item @click="showArea = true" borderBottom label="基地具体地址" required prop="baseInfo.gapInfo.adcode">
  154. <!-- <up-input v-model="form.address" placeholder="请选择基地所在省/市/县/镇(乡)" border="none" clearable></up-input> -->
  155. <view v-if="form?.baseInfo?.gapInfo?.adcode" class="f-s-30 c-333 f-w-5 flex1">{{ form?.baseInfo?.gapInfo?.adcodeName }} </view>
  156. <view v-else class="f-s-30 c-ccc f-w-4 flex1">请选择基地所在省/市/县/镇(乡)</view>
  157. <template #right>
  158. <up-icon size="22rpx" color="#2A6D52" name="arrow-down-fill"></up-icon>
  159. </template>
  160. </up-form-item>
  161. <up-form-item borderBottom prop="baseInfo.gapInfo.address">
  162. <up-input v-model="form.baseInfo.gapInfo.address" placeholder="请填写村级以下的具体地址信息" border="none" clearable></up-input>
  163. </up-form-item>
  164. <up-form-item v-if="['1', '2'].includes(form.baseInfo.baseType)" borderBottom prop="baseInfo.gapInfo.basePic" required>
  165. <view class="flex1 ov-hd">
  166. <view class="d-flex a-c mb-10" style="margin-bottom: 5px">
  167. <view class="f-s-30 c-#666">基地范围</view>
  168. </view>
  169. <view class="bg-#ccc d-flex ov-hd p-rtv" @click="mapDrawArea">
  170. <image class="w-full" v-if="form.baseInfo.gapInfo?.basePic" :src="form.baseInfo.gapInfo.basePic" mode="widthFix" />
  171. <image class="w-full h-380" v-else src="@/static/images/plant/base/select_base_gap.png" mode="widthFix" />
  172. <view v-if="!form.baseInfo.gapInfo?.basePic" class="btn-aree-center d-flex flex-cln a-c j-c">
  173. <image class="w-52 h-52 mb-10" src="@/static/images/plant/base/draw_area_icon.png" mode="widthFix" />
  174. <view class="c-primary f-s-28 f-w-400">点击绘制基地范围</view>
  175. </view>
  176. </view>
  177. </view>
  178. </up-form-item>
  179. <up-form-item v-if="['3'].includes(form.baseInfo.baseType)" borderBottom>
  180. <view class="flex1 ov-hd">
  181. <view class="d-flex a-c mb-10" style="margin-bottom: 5px">
  182. <view class="f-s-30 c-#666">基地范围</view>
  183. </view>
  184. <view class="bg-#ccc d-flex ov-hd p-rtv" @click="mapDrawArea">
  185. <image class="w-full" v-if="form.baseInfo.gapInfo?.basePic" :src="form.baseInfo.gapInfo.basePic" mode="widthFix" />
  186. <image class="w-full h-380" v-else src="@/static/images/plant/base/select_base_gap.png" mode="widthFix" />
  187. <view v-if="!form.baseInfo.gapInfo?.basePic" class="btn-aree-center d-flex flex-cln a-c j-c">
  188. <image class="w-52 h-52 mb-10" src="@/static/images/plant/base/draw_area_icon.png" mode="widthFix" />
  189. <view class="c-primary f-s-28 f-w-400">点击绘制基地范围</view>
  190. </view>
  191. </view>
  192. </view>
  193. </up-form-item>
  194. <view class="h-1" id="areaPppp"></view>
  195. <up-form-item required borderBottom label="基地面积" prop="baseInfo.gapInfo.area">
  196. <up-input v-model="form.baseInfo.gapInfo.area" placeholder="地块绘制后自动带出可修改" border="none" clearable></up-input>
  197. <template #right>
  198. <span>{{ form.baseInfo.gapInfo.areaUnit }}</span>
  199. </template>
  200. </up-form-item>
  201. <!-- 基地经纬度 -->
  202. <view class="h-1" id="lngpppp"></view>
  203. <view class="h-1" id="latpppp"></view>
  204. <up-form-item required label="基地经纬度" class="form-item-wrap-column">
  205. <view class="d-flex" style="margin-top: -10px">
  206. <up-form-item prop="baseInfo.gapInfo.lng">
  207. <up-input v-model="form.baseInfo.gapInfo.lng" border="bottom" placeholder="70-150内的经度数值" clearable></up-input>
  208. </up-form-item>
  209. <view class="pd-5"></view>
  210. <up-form-item prop="baseInfo.gapInfo.lat">
  211. <up-input v-model="form.baseInfo.gapInfo.lat" placeholder="4-53内的纬度数值" border="bottom" clearable></up-input>
  212. </up-form-item>
  213. </view>
  214. </up-form-item>
  215. </template>
  216. </view>
  217. <!-- 地块/圈舍/组培架信息 -->
  218. <view ref="plotRef" class="h-1" id="plot12345"></view>
  219. <template v-if="form.baseInfo.baseType == '1'">
  220. <view class="pd-24">
  221. <view class="startline-title">地块信息</view>
  222. </view>
  223. <view class="pd-24 bg-#fff">
  224. <up-swipe-action>
  225. <template v-for="(item, index) in form.landInfoList" :key="index">
  226. <up-swipe-action-item class="mb-20" :options="options" @click="clickPlotSwipe($event, item, index, '编辑地块信息')">
  227. <view class="plot-item pd-24">
  228. <view class="d-flex mb-16">
  229. <view class="f-s-32 f-w-5 c-#333 flex1 mr-10">{{ item?.landName || '-' }}</view>
  230. <view v-if="item?.contactName" class="f-s-24 c-#333">负责人:{{ item?.contactName }}</view>
  231. </view>
  232. <view class="f-s-28 c-#666">
  233. <span class="">面积:</span>
  234. <span class="c-#333 f-w-5">{{ item?.area || '-' }}{{ item?.areaUnit || '-' }}</span>
  235. </view>
  236. </view>
  237. </up-swipe-action-item>
  238. </template>
  239. </up-swipe-action>
  240. <up-button @click="addPlot({ landType: form.baseInfo.baseType, areaUnit: form.baseInfo.gapInfo.areaUnit }, '添加地块')" type="primary" text="确定" plain>
  241. <up-icon class="mr-10" name="plus" color="#37A954"></up-icon>
  242. <span>添加地块信息</span>
  243. </up-button>
  244. </view>
  245. </template>
  246. <template v-if="form.baseInfo.baseType == '2'">
  247. <view class="pd-24">
  248. <view class="startline-title">圈舍信息</view>
  249. </view>
  250. <view class="pd-24 bg-#fff">
  251. <up-swipe-action>
  252. <template v-for="(item, index) in form.landInfoList" :key="index">
  253. <up-swipe-action-item class="mb-20" :options="options" @click="clickPlotSwipe($event, item, index, '编辑圈舍信息')">
  254. <view class="plot-item pd-24">
  255. <view class="d-flex mb-16">
  256. <view class="f-s-32 f-w-5 c-#333 flex1 mr-10">{{ item?.landName || '-' }}</view>
  257. <view v-if="item?.contactName" class="f-s-24 c-#333">负责人:{{ item?.contactName }}</view>
  258. </view>
  259. <view class="f-s-28 c-#666">
  260. <span class="">面积:</span>
  261. <span class="c-#333 f-w-5">{{ item?.area || '-' }}{{ item?.areaUnit || '-' }}</span>
  262. </view>
  263. </view>
  264. </up-swipe-action-item>
  265. </template>
  266. </up-swipe-action>
  267. <up-button @click="addPlot({ landType: form.baseInfo.baseType, areaUnit: form.baseInfo.gapInfo.areaUnit }, '添加圈舍')" type="primary" text="确定" plain>
  268. <up-icon class="mr-10" name="plus" color="#37A954"></up-icon>
  269. <span>添加圈舍信息</span>
  270. </up-button>
  271. </view>
  272. </template>
  273. <template v-if="form.baseInfo.baseType == '3'">
  274. <view class="pd-24">
  275. <view class="startline-title">组培架信息</view>
  276. </view>
  277. <view class="pd-24 bg-#fff">
  278. <up-swipe-action>
  279. <template v-for="(item, index) in form.landInfoList" :key="index">
  280. <up-swipe-action-item class="mb-20" :options="options" @click="clickPlotSwipe($event, item, index, '编辑组培架信息')">
  281. <view class="plot-item pd-24">
  282. <view class="d-flex mb-16">
  283. <view class="f-s-32 f-w-5 c-#333 flex1 mr-10">{{ item?.landName || '-' }}</view>
  284. <view v-if="item?.contactName" class="f-s-24 c-#333">负责人:{{ item?.contactName }}</view>
  285. </view>
  286. <view class="d-flex flex-wrap gap-10">
  287. <view class="f-s-28 c-#666 w-310">
  288. <span class="">层数:</span>
  289. <span class="c-#333 f-w-5">{{ item?.layers || '-' }}</span>
  290. </view>
  291. <view class="f-s-28 c-#666 w-310">
  292. <span class="">每层容量:</span>
  293. <span class="c-#333 f-w-5">{{ item?.capacityAmount || '-' }}{{ item?.capacityUnit || '-' }}</span>
  294. </view>
  295. <view class="f-s-28 c-#666 w-310">
  296. <span class="">总容量:</span>
  297. <span class="c-#333 f-w-5">{{ item?.capacityAmount * item?.layers || '-' }}{{ item?.capacityUnit || '-' }}</span>
  298. </view>
  299. <view class="f-s-28 c-#666 w-310">
  300. <span v-if="item?.lightType" class="mr-10">{{ selectDictLabel(pt_light_type, item?.lightType) }}</span>
  301. <span v-if="item?.tempeStatus">{{ +item?.tempeStatus ? '有独立温控' : '无独立温控' }}</span>
  302. </view>
  303. </view>
  304. </view>
  305. </up-swipe-action-item>
  306. </template>
  307. </up-swipe-action>
  308. <up-button @click="addPlot({ landType: form.baseInfo.baseType, areaUnit: form.baseInfo.gapInfo.areaUnit, capacityUnit: '瓶' }, '添加组培架')" type="primary" text="确定" plain>
  309. <up-icon class="mr-10" name="plus" color="#37A954"></up-icon>
  310. <span>添加组培架信息</span>
  311. </up-button>
  312. </view>
  313. </template>
  314. <view class="pd-24" id="environment12345">
  315. <view class="startline-title">选址依据及环境信息</view>
  316. </view>
  317. <template v-if="form.baseInfo.baseType == '1'">
  318. <view class="pd-24 bg-#fff mb-10">
  319. <view class="f-s-32 c-#333 f-w-600">选址依据</view>
  320. <up-form-item label="是否道地产区">
  321. <up-radio-group v-model="form.environmentInfo.daoStatus">
  322. <up-radio :customStyle="{ marginRight: '60rpx' }" v-for="(item, index) in yes_no" :key="index" :label="item.label" :name="item.value"></up-radio>
  323. </up-radio-group>
  324. </up-form-item>
  325. <up-form-item label="基地选址依据/标准" prop="environmentInfo.accordFile" borderBottom>
  326. <ut-upload v-model="form.environmentInfo.accordFile" :max-count="9" valueType="array" accept="file"></ut-upload>
  327. </up-form-item>
  328. <up-form-item label="文献或科学数据等选址适应性证明材料" prop="environmentInfo.adaptFile" borderBottom>
  329. <ut-upload v-model="form.environmentInfo.adaptFile" :max-count="9" valueType="array" accept="file"></ut-upload>
  330. </up-form-item>
  331. </view>
  332. <view class="pd-24 bg-#fff mb-10">
  333. <view class="f-s-32 c-#333 f-w-600">环境信息</view>
  334. <!-- 土壤类型选择 -->
  335. <ut-action-sheet v-model="form.environmentInfo.soilType" :tabs="pt_soil_type" title="选择土壤类型">
  336. <up-form-item borderBottom label="土壤类型" prop="soilType">
  337. <view v-if="form.environmentInfo.soilType" class="f-s-30 c-333 f-w-5 flex1">{{ selectDictLabel(pt_soil_type, form.environmentInfo.soilType) }}</view>
  338. <view v-else class="f-s-30 c-ccc f-w-4 flex1">请选择土壤类型</view>
  339. <template #right>
  340. <up-icon size="22rpx" color="#2A6D52" name="arrow-down-fill"></up-icon>
  341. </template>
  342. </up-form-item>
  343. </ut-action-sheet>
  344. <!-- 字典 -->
  345. <ut-action-sheet v-model="form.environmentInfo.soilTexture" :tabs="pt_soil_texture" title="选择土壤质地">
  346. <up-form-item borderBottom label="土壤质地" prop="soilTexture">
  347. <view v-if="form.environmentInfo.soilTexture" class="f-s-30 c-333 f-w-5 flex1">{{ selectDictLabel(pt_soil_texture, form.environmentInfo.soilTexture) }}</view>
  348. <view v-else class="f-s-30 c-ccc f-w-4 flex1">请选择土壤质地</view>
  349. <template #right>
  350. <up-icon size="22rpx" color="#2A6D52" name="arrow-down-fill"></up-icon>
  351. </template>
  352. </up-form-item>
  353. </ut-action-sheet>
  354. <up-form-item label="有机质含量" prop="environmentInfo.organic" borderBottom>
  355. <up-input v-model="form.environmentInfo.organic" placeholder="请输入有机质含量" border="none" clearable></up-input>
  356. </up-form-item>
  357. <up-form-item label="土壤PH值" prop="environmentInfo.soilPh" borderBottom>
  358. <up-input v-model="form.environmentInfo.soilPh" placeholder="请输入土壤PH值" border="none" clearable></up-input>
  359. </up-form-item>
  360. <ut-action-sheet v-model="form.environmentInfo.waterType" :tabs="pt_water_type" title="选择水源类型">
  361. <up-form-item borderBottom label="水源类型" prop="waterType">
  362. <view v-if="form.environmentInfo.waterType" class="f-s-30 c-333 f-w-5 flex1">{{ selectDictLabel(pt_water_type, form.environmentInfo.waterType) }}</view>
  363. <view v-else class="f-s-30 c-ccc f-w-4 flex1">请选择水源类型</view>
  364. <template #right>
  365. <up-icon size="22rpx" color="#2A6D52" name="arrow-down-fill"></up-icon>
  366. </template>
  367. </up-form-item>
  368. </ut-action-sheet>
  369. <up-form-item label="无霜期" prop="environmentInfo.notFrost" borderBottom>
  370. <up-input v-model="form.environmentInfo.notFrost" placeholder="请输入无霜期" border="none" clearable></up-input>
  371. <template #right>
  372. <span>天</span>
  373. </template>
  374. </up-form-item>
  375. <up-form-item label="年降水量" prop="environmentInfo.precipitation" borderBottom>
  376. <up-input v-model="form.environmentInfo.precipitation" placeholder="请输入年降水量" border="none" clearable></up-input>
  377. <template #right>
  378. <span>mm</span>
  379. </template>
  380. </up-form-item>
  381. <up-form-item label="年平均气温" prop="environmentInfo.avgTem" borderBottom>
  382. <up-input v-model="form.environmentInfo.avgTem" placeholder="请输入年平均气温" border="none" clearable></up-input>
  383. <template #right>
  384. <span>℃</span>
  385. </template>
  386. </up-form-item>
  387. <up-form-item label="年绝对最高气温" prop="environmentInfo.maxTem" borderBottom>
  388. <up-input v-model="form.environmentInfo.maxTem" placeholder="请输入年绝对最高气温" border="none" clearable></up-input>
  389. <template #right>
  390. <span>℃</span>
  391. </template>
  392. </up-form-item>
  393. <up-form-item label="年绝对最低气温" prop="environmentInfo.minTem" borderBottom>
  394. <up-input v-model="form.environmentInfo.minTem" placeholder="请输入年绝对最低气温" border="none" clearable></up-input>
  395. <template #right>
  396. <span>℃</span>
  397. </template>
  398. </up-form-item>
  399. <up-form-item label="年日照时数" prop="environmentInfo.sunshineHours" borderBottom>
  400. <up-input v-model="form.environmentInfo.sunshineHours" placeholder="请输入年日照时数" border="none" clearable></up-input>
  401. <template #right>
  402. <span>小时</span>
  403. </template>
  404. </up-form-item>
  405. <up-form-item label="海拔" prop="environmentInfo.altitude" borderBottom>
  406. <up-input v-model="form.environmentInfo.altitude" placeholder="请输入海拔" border="none" clearable></up-input>
  407. <template #right>
  408. <span>米</span>
  409. </template>
  410. </up-form-item>
  411. <!-- 水、土壤、大气等环评报告 -->
  412. <up-form-item label="水、土壤、大气等环评报告" prop="environmentInfo.report" borderBottom>
  413. <ut-upload v-model="form.environmentInfo.report" :max-count="9" valueType="array" accept="file"></ut-upload>
  414. </up-form-item>
  415. <!-- 基地图片 -->
  416. <up-form-item label="基地图片" prop="environmentInfo.basePic" borderBottom>
  417. <ut-upload v-model="form.environmentInfo.basePic" :max-count="9"></ut-upload>
  418. </up-form-item>
  419. <!-- 基地视频 -->
  420. <up-form-item label="基地视频" prop="environmentInfo.baseVoice" borderBottom>
  421. <ut-upload v-model="form.environmentInfo.baseVoice" :max-count="1" valueType="array" accept="video"></ut-upload>
  422. </up-form-item>
  423. </view>
  424. </template>
  425. <template v-if="form.baseInfo.baseType == '2'">
  426. <view class="pd-24 bg-#fff mb-10">
  427. <view class="f-s-32 c-#333 f-w-600">选址依据</view>
  428. <up-form-item label="是否道地产区">
  429. <up-radio-group v-model="form.environmentInfo.daoStatus">
  430. <up-radio :customStyle="{ marginRight: '60rpx' }" v-for="(item, index) in yes_no" :key="index" :label="item.label" :name="item.value"></up-radio>
  431. </up-radio-group>
  432. </up-form-item>
  433. <up-form-item label="基地选址依据/标准" prop="environmentInfo.accordFile" borderBottom>
  434. <ut-upload v-model="form.environmentInfo.accordFile" :max-count="9" valueType="array" accept="file"></ut-upload>
  435. </up-form-item>
  436. <up-form-item label="文献或科学数据等选址适应性证明材料" prop="environmentInfo.adaptFile" borderBottom>
  437. <ut-upload v-model="form.environmentInfo.adaptFile" :max-count="9" valueType="array" accept="file"></ut-upload>
  438. </up-form-item>
  439. </view>
  440. <view class="pd-24 bg-#fff mb-10">
  441. <view class="f-s-32 c-#333 f-w-600">环境信息</view>
  442. <ut-action-sheet v-model="form.environmentInfo.waterType" :tabs="pt_water_type" title="选择水源类型">
  443. <up-form-item borderBottom label="水源类型" prop="waterType">
  444. <view v-if="form.environmentInfo.waterType" class="f-s-30 c-333 f-w-5 flex1">{{ selectDictLabel(pt_water_type, form.environmentInfo.waterType) }}</view>
  445. <view v-else class="f-s-30 c-ccc f-w-4 flex1">请选择水源类型</view>
  446. <template #right>
  447. <up-icon size="22rpx" color="#2A6D52" name="arrow-down-fill"></up-icon>
  448. </template>
  449. </up-form-item>
  450. </ut-action-sheet>
  451. <up-form-item label="无霜期" prop="environmentInfo.notFrost" borderBottom>
  452. <up-input v-model="form.environmentInfo.notFrost" placeholder="请输入无霜期" border="none" clearable></up-input>
  453. <template #right>
  454. <span>天</span>
  455. </template>
  456. </up-form-item>
  457. <up-form-item label="年降水量" prop="environmentInfo.precipitation" borderBottom>
  458. <up-input v-model="form.environmentInfo.precipitation" placeholder="请输入年降水量" border="none" clearable></up-input>
  459. <template #right>
  460. <span>mm</span>
  461. </template>
  462. </up-form-item>
  463. <up-form-item label="年平均气温" prop="environmentInfo.avgTem" borderBottom>
  464. <up-input v-model="form.environmentInfo.avgTem" placeholder="请输入年平均气温" border="none" clearable></up-input>
  465. <template #right>
  466. <span>℃</span>
  467. </template>
  468. </up-form-item>
  469. <up-form-item label="年绝对最高气温" prop="environmentInfo.maxTem" borderBottom>
  470. <up-input v-model="form.environmentInfo.maxTem" placeholder="请输入年绝对最高气温" border="none" clearable></up-input>
  471. <template #right>
  472. <span>℃</span>
  473. </template>
  474. </up-form-item>
  475. <up-form-item label="年绝对最低气温" prop="environmentInfo.minTem" borderBottom>
  476. <up-input v-model="form.environmentInfo.minTem" placeholder="请输入年绝对最低气温" border="none" clearable></up-input>
  477. <template #right>
  478. <span>℃</span>
  479. </template>
  480. </up-form-item>
  481. <up-form-item label="年日照时数" prop="environmentInfo.sunshineHours" borderBottom>
  482. <up-input v-model="form.environmentInfo.sunshineHours" placeholder="请输入年日照时数" border="none" clearable></up-input>
  483. <template #right>
  484. <span>小时</span>
  485. </template>
  486. </up-form-item>
  487. <up-form-item label="海拔" prop="environmentInfo.altitude" borderBottom>
  488. <up-input v-model="form.environmentInfo.altitude" placeholder="请输入海拔" border="none" clearable></up-input>
  489. <template #right>
  490. <span>米</span>
  491. </template>
  492. </up-form-item>
  493. <!-- 水、土壤、大气等环评报告 -->
  494. <up-form-item label="水、大气等环评报告" prop="environmentInfo.report" borderBottom>
  495. <ut-upload v-model="form.environmentInfo.report" :max-count="9" valueType="array" accept="file"></ut-upload>
  496. </up-form-item>
  497. <!-- 基地图片 -->
  498. <up-form-item label="基地图片" prop="environmentInfo.basePic" borderBottom>
  499. <ut-upload v-model="form.environmentInfo.basePic" :max-count="9"></ut-upload>
  500. </up-form-item>
  501. <!-- 基地视频 -->
  502. <up-form-item label="基地视频" prop="environmentInfo.baseVoice" borderBottom>
  503. <ut-upload v-model="form.environmentInfo.baseVoice" :max-count="1" valueType="array" accept="video"></ut-upload>
  504. </up-form-item>
  505. </view>
  506. </template>
  507. <template v-if="form.baseInfo.baseType == '3'">
  508. <view class="pd-24 bg-#fff mb-10">
  509. <up-form-item label="温度" prop="environmentInfo.temperature" borderBottom>
  510. <up-input v-model="form.environmentInfo.temperature" placeholder="请输入温度" border="none" clearable></up-input>
  511. <template #right>
  512. <span>℃</span>
  513. </template>
  514. </up-form-item>
  515. <up-form-item label="湿度" prop="environmentInfo.humidity" borderBottom>
  516. <up-input v-model="form.environmentInfo.humidity" placeholder="请输入湿度" border="none" clearable></up-input>
  517. <template #right>
  518. <span>%</span>
  519. </template>
  520. </up-form-item>
  521. <up-form-item label="洁净度" prop="environmentInfo.cleanliness" borderBottom>
  522. <up-input v-model="form.environmentInfo.cleanliness" placeholder="请输入洁净度" border="none" clearable></up-input>
  523. </up-form-item>
  524. <up-form-item label="光照" prop="environmentInfo.illumination" borderBottom>
  525. <up-input v-model="form.environmentInfo.illumination" placeholder="请输入光照" border="none" clearable></up-input>
  526. </up-form-item>
  527. <up-form-item label="光照周期" prop="environmentInfo.lightCycle" borderBottom>
  528. <up-input v-model="form.environmentInfo.lightCycle" placeholder="请输入光照周期" border="none" clearable></up-input>
  529. </up-form-item>
  530. </view>
  531. </template>
  532. </up-form>
  533. <template #bottom>
  534. <view class="pd-20 d-flex">
  535. <up-button v-if="!did" @click="saveBaseInfo" class="mr-30" color="#F19F18" type="primary">暂存</up-button>
  536. <up-button @click="submitForm" type="primary">提交</up-button>
  537. </view>
  538. </template>
  539. </z-paging>
  540. <ut-picker-area v-model:show="showArea" v-model="form.baseInfo.gapInfo.adcode" @confirm="confirmArea"></ut-picker-area>
  541. <FormPlot v-if="showPlot" v-model:show="showPlot" v-model="rowForm" :title="plotTitle" :dict="{ pt_light_type, pt_capacity_unit, yes_no }" @submit="submitFormPlotAdd"></FormPlot>
  542. <FormPlot v-if="showPlotEdit" v-model:show="showPlotEdit" v-model="rowFormEdit" :title="plotTitle" :dict="{ pt_light_type, pt_capacity_unit, yes_no }" @submit="submitFormPlotEdit"></FormPlot>
  543. </template>
  544. <script setup lang="ts">
  545. import { useClientRequest } from '@/utils/request';
  546. import { isOpenSetting } from '@/utils/common';
  547. import { generateUniqueId } from '@/utils/public';
  548. import FormPlot from './models/form-plot.vue';
  549. import { getUrlParams, recursiveDecodeURIComponent } from '@/utils/ruoyi';
  550. // import { $uGetRect } from 'uview-plus'
  551. const tabs = reactive([
  552. { label: '基本信息', value: 'base' },
  553. { label: '地块信息', value: 'plot' },
  554. { label: '选址依据及环境信息', value: 'environment' },
  555. ]);
  556. const activeTab = ref('base');
  557. const { proxy } = getCurrentInstance() as ComponentInternalInstance;
  558. const { yes_no, pt_org_type, pt_base_type, pt_water_type, pt_soil_type, pt_soil_texture, pt_light_type, pt_capacity_unit } = toRefs<any>(proxy?.useDict('yes_no', 'pt_org_type', 'pt_base_type', 'pt_water_type', 'pt_soil_type', 'pt_soil_texture', 'pt_light_type', 'pt_capacity_unit'));
  559. const paging = ref<any>(null);
  560. const upFormRef = ref<any>(null);
  561. const showArea = ref(false);
  562. const showPlot = ref(false);
  563. const showPlotEdit = ref(false);
  564. const plotTitle = ref('添加地块信息');
  565. const rowEidtIdx = ref<number | string>(-1);
  566. const rowForm = ref<any>(null);
  567. const rowFormEdit = ref<any>(null);
  568. const form = ref<any>({
  569. baseInfo: {
  570. baseType: '',
  571. baseName: '',
  572. baseCode: '',
  573. gapFlag: '',
  574. buildDate: '',
  575. orgType: '',
  576. contactId: undefined,
  577. contactName: undefined,
  578. gapId: undefined,
  579. gapInfo: {
  580. adcode: '',
  581. adcodeName: '',
  582. address: '',
  583. areaUnit: '亩',
  584. area: undefined,
  585. },
  586. randomCode: generateUniqueId(),
  587. // 当前位置经纬度
  588. longitudeLatitude: {
  589. lng: '',
  590. lat: '',
  591. },
  592. coordinates: [],
  593. }, // 基地信息
  594. landInfoList: [], // 地块/圈舍/组培架信息
  595. environmentInfo: {}, // 基地环境信息
  596. });
  597. const options = ref([
  598. {
  599. text: '编辑',
  600. name: 'edit',
  601. style: {
  602. backgroundColor: '#37a954',
  603. color: '#fff',
  604. },
  605. },
  606. {
  607. text: '删除',
  608. name: 'delete',
  609. style: {
  610. backgroundColor: '#FF3B30',
  611. color: '#fff',
  612. },
  613. },
  614. ]);
  615. const rules = reactive({
  616. 'baseInfo.baseName': [{ required: true, message: '请输入基地名称' }],
  617. 'baseInfo.baseCode': [{ required: true, message: '请输入基地编号' }],
  618. 'baseInfo.buildDate': [{ required: true, message: '请选择建设时间' }],
  619. 'baseInfo.orgType': [{ required: true, message: '请选择基地组织方式' }],
  620. 'baseInfo.contactId': [{ required: true, message: '请选择基地负责人' }],
  621. 'baseInfo.contactTel': [{ required: true, message: '请输入基地联系电话' }],
  622. 'baseInfo.gapInfo.adcode': [{ required: true, message: '请选择基地具体地址' }],
  623. 'baseInfo.gapFlag': [{ required: true, message: '请选择是否为Gap基地' }],
  624. 'baseInfo.gapInfo.basePic': [{ required: true, message: '请绘制基地范围' }],
  625. 'baseInfo.gapInfo.area': [{ required: true, message: '请输入基地面积' }],
  626. 'baseInfo.gapInfo.lng': [{ required: true, message: '请输入基地经纬度' }],
  627. 'baseInfo.gapInfo.lat': [{ required: true, message: '请输入基地经纬度' }],
  628. });
  629. // saveInfo和submitForm防抖
  630. // 暂存基地信息
  631. const saveBaseInfo = async () => {
  632. uni.$u.debounce(
  633. async () => {
  634. // 提交表单
  635. uni.showLoading({
  636. title: '保存中...',
  637. });
  638. try {
  639. const res = await useClientRequest.post('/plt-api/app/base/temp', form.value);
  640. uni.hideLoading();
  641. if (!res || res.code !== 200) return;
  642. uni.showToast({
  643. title: '保存成功',
  644. icon: 'success',
  645. });
  646. uni.$emit('refreshBaseList');
  647. // 返回上一页
  648. setTimeout(() => {
  649. uni.navigateBack({
  650. delta: 1,
  651. });
  652. }, 1500);
  653. } catch (error) {
  654. uni.hideLoading();
  655. }
  656. },
  657. 500,
  658. true
  659. );
  660. };
  661. const submitForm = async () => {
  662. uni.$u.debounce(
  663. async () => {
  664. try {
  665. await upFormRef.value?.validate();
  666. } catch (error: any) {
  667. // 滚动到第一个错误字段
  668. console.log(error);
  669. const firstErrorField = error && error[0].field + 'pppp';
  670. paging.value?.scrollIntoViewById(firstErrorField, 30, true);
  671. return;
  672. }
  673. // 提交表单
  674. uni.showLoading({
  675. title: '提交中...',
  676. });
  677. try {
  678. const res = did.value && !+form.value?.baseInfo?.gapFlag ? await useClientRequest.post('/plt-api//app/base/update', form.value) : await useClientRequest.post('/plt-api/app/base/add', form.value);
  679. uni.hideLoading();
  680. if (!res || res.code !== 200) return;
  681. uni.hideLoading();
  682. uni.showToast({
  683. title: '提交成功',
  684. icon: 'success',
  685. });
  686. uni.$emit('refreshBaseList');
  687. // 返回上一页
  688. setTimeout(() => {
  689. uni.navigateBack({
  690. delta: 1,
  691. });
  692. }, 1500);
  693. } catch (error) {
  694. uni.hideLoading();
  695. }
  696. },
  697. 500,
  698. true
  699. );
  700. };
  701. const mapDrawArea = async () => {
  702. uni.$on('mapAreaData', (data: any) => {
  703. // 这里可以将 data 赋值给 form 中的相应字段
  704. form.value.baseInfo.gapInfo.basePic = data.gapInfo.basePic;
  705. form.value.baseInfo.gapInfo.area = String(data.gapInfo.area);
  706. form.value.baseInfo.gapInfo.areaUnit = data.gapInfo.areaUnit;
  707. form.value.baseInfo.coordinates = data.coordinates;
  708. form.value.baseInfo.gapInfo.lng = data.mapInfo.lng;
  709. form.value.baseInfo.gapInfo.lat = data.mapInfo.lat;
  710. form.value.baseInfo.lnglat = `${data.mapInfo.lng},${data.mapInfo.lat}`;
  711. form.value.baseInfo.zoom = data.mapInfo.zoom;
  712. uni.$off('mapAreaData');
  713. });
  714. if (form.value.baseInfo.gapInfo?.basePic) {
  715. // 暂存地图当前数据后跳转
  716. await useClientRequest.post('/plt-api/app/gapCertificationInfo/painting', {
  717. randomCode: form.value.id || form.value.baseInfo.randomCode,
  718. value: JSON.stringify({
  719. gapInfo: form.value.baseInfo.gapInfo,
  720. coordinates: form.value.baseInfo.coordinates,
  721. }),
  722. });
  723. }
  724. uni.$u.route({
  725. type: 'navigateTo',
  726. url: '/tools/map-draw-area/index',
  727. params: {
  728. drawId: form.value.id || form.value.baseInfo.randomCode,
  729. unit: form.value.baseInfo.gapInfo.areaUnit || '亩',
  730. lng: form.value.baseInfo.gapInfo.lng || form.value.longitudeLatitude.lng || '',
  731. lat: form.value.baseInfo.gapInfo.lat || form.value.longitudeLatitude.lat || '',
  732. zoom: form.value.baseInfo.zoom,
  733. },
  734. });
  735. };
  736. const clickPlotSwipe = (e: any, item: any, idx: number | string, title = '编辑地块') => {
  737. console.log(e, item);
  738. const index = e.index;
  739. if (index == 0) {
  740. // 编辑
  741. plotTitle.value = title;
  742. rowFormEdit.value = item;
  743. rowEidtIdx.value = idx;
  744. showPlotEdit.value = true;
  745. }
  746. if (index == 1) {
  747. // 删除
  748. form.value.landInfoList.splice(idx, 1);
  749. }
  750. };
  751. const submitFormPlotEdit = (data: any) => {
  752. if (rowEidtIdx.value === -1) return;
  753. form.value.landInfoList[rowEidtIdx.value] = {
  754. ...data,
  755. };
  756. };
  757. const selectCpyMember = () => {
  758. uni.$on('selectCpyMember', (item: any) => {
  759. form.value.baseInfo.contactId = item.userInfo?.id;
  760. form.value.baseInfo.contactName = item.userInfo?.name;
  761. form.value.baseInfo.contactTel = item.userInfo?.phone;
  762. uni.$off('selectCpyMember');
  763. });
  764. uni.$u.route({
  765. type: 'navigateTo',
  766. url: '/tools/select-cpy-member/index',
  767. });
  768. };
  769. const selectGapInfo = () => {
  770. uni.$on('selectGapInfo', (item: any) => {
  771. console.log(item);
  772. form.value.baseInfo.gapId = item.id || undefined;
  773. form.value.baseInfo.gapInfo = item;
  774. uni.$off('selectGapInfo');
  775. });
  776. uni.$u.route({
  777. type: 'navigateTo',
  778. url: '/tools/select-gap-info/index',
  779. params: {
  780. baseType: form.value.baseInfo.baseType,
  781. },
  782. });
  783. };
  784. const removeGapInfo = () => {
  785. form.value.baseInfo.gapId = undefined;
  786. form.value.baseInfo.gapInfo = {
  787. adcode: '',
  788. adcodeName: '',
  789. address: '',
  790. areaUnit: mapUnitByBaseType[form.value.baseInfo.baseType],
  791. area: undefined,
  792. };
  793. };
  794. const confirmArea = (area: any) => {
  795. form.value.baseInfo.gapInfo.adcodeName = area.fullName;
  796. };
  797. // value label value
  798. const changeActiveTab = (value: any) => {
  799. let scrollId = `${value.value}12345`;
  800. paging.value?.scrollIntoViewById(scrollId, 30, true);
  801. };
  802. onLoad((options: any) => {
  803. form.value.baseInfo.baseType = options.baseType || '1';
  804. form.value.baseInfo.gapInfo.areaUnit = mapUnitByBaseType[options.baseType || '1'];
  805. did.value = options?.id || getUrlParams(recursiveDecodeURIComponent(options?.q))?.id || '';
  806. if (did.value) {
  807. getDetailById(did.value);
  808. }
  809. getLocationByAddress();
  810. });
  811. onMounted(() => {});
  812. // 获取当前经纬度返回地址
  813. const getLocationByAddress = async () => {
  814. const info = await uni.getSystemInfo();
  815. let locationEnabled = info.locationEnabled; //判断手机定位服务是否开启
  816. let locationAuthorized = info.locationAuthorized; //判断定位服务是否允许微信授权
  817. if (locationEnabled == false || locationAuthorized == false) {
  818. //手机定位服务(GPS)未授权
  819. uni.showModal({
  820. title: '提示',
  821. content: '请打开定位服务功能',
  822. showCancel: false, // 不显示取消按钮
  823. });
  824. return;
  825. }
  826. const scope = await isOpenSetting('scope.userLocation');
  827. if (!scope) return;
  828. const location = await uni.getLocation({ type: 'gcj02', isHighAccuracy: true });
  829. form.value.longitudeLatitude = {
  830. lng: location.longitude,
  831. lat: location.latitude,
  832. };
  833. };
  834. const addPlot = (rowItem: any, title = '添加地块') => {
  835. rowForm.value = {
  836. ...rowItem,
  837. };
  838. plotTitle.value = title;
  839. showPlot.value = true;
  840. };
  841. const submitFormPlotAdd = (data: any) => {
  842. form.value.landInfoList.push({
  843. ...data,
  844. });
  845. };
  846. const mapUnitByBaseType: any = {
  847. '1': '亩',
  848. '2': '平方米',
  849. '3': '平方米',
  850. };
  851. const did = ref('');
  852. // 根据id获取基地详情
  853. const getDetailById = async (id: string) => {
  854. const res = await useClientRequest.get(`/plt-api/app/base/getInfoAllById/${id}`);
  855. if (res && res.code === 200) {
  856. form.value = res.data || {};
  857. }
  858. };
  859. </script>
  860. <style lang="scss" scoped>
  861. .z-paging-wrap {
  862. position: absolute;
  863. right: 0;
  864. top: 0;
  865. bottom: 0;
  866. left: 0;
  867. }
  868. .btn-aree-center {
  869. position: absolute;
  870. top: 0;
  871. right: 0;
  872. bottom: 0;
  873. left: 0;
  874. }
  875. .plot-item {
  876. border: 1rpx solid rgba($u-primary, 0.4);
  877. border-radius: 10rpx;
  878. }
  879. .gap-info-card {
  880. border: 1rpx solid rgba($u-primary, 0.4);
  881. .card-close {
  882. position: absolute;
  883. top: 0rpx;
  884. right: 0rpx;
  885. }
  886. }
  887. </style>