移动端
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

293 linhas
8.0 KiB

  1. <template>
  2. <div class="app-container">
  3. <van-nav-bar left-arrow fixed placeholder @click-left="onClickLeft" >
  4. <template #title>
  5. <div class="tb_main">
  6. 新增承包方信息
  7. </div>
  8. </template>
  9. </van-nav-bar>
  10. <div class="list_main">
  11. <van-form ref="formData">
  12. <van-field v-model="form.cbfbm" label="代码:" placeholder="请输入代码" required :rules="[{ required: true }]" :border="false" input-align="left" maxlength="18">
  13. <template #button>
  14. <van-button size="mini" type="primary" native-type="button" @click="generateCode">生成代码</van-button>
  15. </template>
  16. </van-field>
  17. <van-field
  18. v-model="cbflxText"
  19. label="类型:"
  20. placeholder="请选择类型"
  21. required
  22. :rules="[{ required: true }]"
  23. :border="false"
  24. input-align="left"
  25. right-icon="arrow-down"
  26. readonly
  27. clickable
  28. @click="showType = true"
  29. />
  30. <van-popup v-model="showType" position="bottom">
  31. <van-picker
  32. show-toolbar
  33. :columns="contractorTypeOptions"
  34. value-key="dictLabel"
  35. @confirm="onConfirmTypeOptions"
  36. @cancel="showType = false"
  37. />
  38. </van-popup>
  39. <van-field v-model="form.cbfmc" label="名称:" placeholder="请输入名称" required :rules="[{ required: true }]" :border="false" input-align="left" maxlength="50" />
  40. <van-field
  41. v-model="cbfzjlxText"
  42. label="证件类型:"
  43. placeholder="请选择证件类型"
  44. required
  45. :rules="[{ required: true }]"
  46. :border="false"
  47. input-align="left"
  48. right-icon="arrow-down"
  49. readonly
  50. clickable
  51. @click="showZjType = true"
  52. />
  53. <van-popup v-model="showZjType" position="bottom">
  54. <van-picker
  55. show-toolbar
  56. :columns="credentialTypeOptions"
  57. value-key="dictLabel"
  58. @confirm="onConfirmZjTypeOptions"
  59. @cancel="showZjType = false"
  60. />
  61. </van-popup>
  62. <van-field v-model="form.cbfzjhm" label="证件号码:" placeholder="请输入证件号码" required :rules="[{ required: true }]" :border="false" input-align="left" maxlength="20" />
  63. <van-field v-model="form.cbfdz" label="地址:" placeholder="请输入地址" required :rules="[{ required: true }]" :border="false" input-align="left" maxlength="100" />
  64. <van-field v-model="form.yzbm" label="邮编:" placeholder="请输入邮编" required :rules="[{ required: true }]" :border="false" input-align="left" maxlength="6" />
  65. <van-field v-model="form.lxdh" label="电话:" placeholder="请输入电话" required :rules="[{ required: true }]" :border="false" input-align="left" maxlength="15" />
  66. <van-field v-model="form.cbfdcjs" label="调查记事:" type="textarea" rows="3" placeholder="请输入调查记事" required :rules="[{ required: true }]" :border="false" input-align="left" maxlength="250" />
  67. </van-form>
  68. <p class="btn" @click="submitForm">保存</p>
  69. </div>
  70. </div>
  71. </template>
  72. <script>
  73. import Cookies from "js-cookie";
  74. import { addCbf, generateContractorCode } from "@/api/contracted/cbf";
  75. export default {
  76. name: "contractedVillageContractorAdd",
  77. data() {
  78. return {
  79. showType:false,
  80. showZjType:false,
  81. // 承包方信息表单
  82. form: {
  83. deptId: null,
  84. cbfbm: null,
  85. cbflx: '1',
  86. cbfmc: null,
  87. cbfzjlx: '1',
  88. cbfzjhm: null,
  89. cbfdz: null,
  90. yzbm: null,
  91. lxdh: null,
  92. cbfcysl: null,
  93. cbfdcjs: null,
  94. },
  95. // 承包方类型(标签名)
  96. cbflxText: '农户',
  97. // 承包方证件类型(标签名)
  98. cbfzjlxText: '居民身份证',
  99. // 承包方类型字典
  100. contractorTypeOptions: [],
  101. // 承包方证件类型字典
  102. credentialTypeOptions: [],
  103. };
  104. },
  105. created() {
  106. this.getDicts("cbf_type").then(response => {
  107. this.contractorTypeOptions = response.data;
  108. });
  109. this.getDicts("cert_type").then(response => {
  110. this.credentialTypeOptions = response.data;
  111. });
  112. },
  113. methods: {
  114. onConfirmTypeOptions(value){
  115. this.form.cbflx = value.dictValue;
  116. this.cbflxText = value.dictLabel;
  117. this.showType = false;
  118. },
  119. onConfirmZjTypeOptions(value){
  120. this.form.cbfzjlx = value.dictValue;
  121. this.cbfzjlxText = value.dictLabel;
  122. this.showZjType = false;
  123. },
  124. submitForm() {
  125. this.$refs.formData.validate().then(() => {
  126. this.form.deptId = this.$route.params.deptId;
  127. this.form.cbfcysl = 1;
  128. addCbf(this.form).then(response => {
  129. if (response.code == 200) {
  130. this.$toast({
  131. icon: 'success',
  132. message: '保存成功',
  133. duration:"1000",
  134. onClose: function() {
  135. history.back(-1);
  136. }
  137. })
  138. }
  139. });
  140. }).catch(() => {
  141. this.$notify({ type: 'danger', message: '请填写完整的表单项' });
  142. });
  143. },
  144. generateCode() {
  145. generateContractorCode({deptId: this.$route.params.deptId}).then(response => {
  146. this.$set(this.form, 'cbfbm', response.data);
  147. });
  148. },
  149. },
  150. };
  151. </script>
  152. <style scoped lang="scss">
  153. .app-container{
  154. background: #fff url("../../../../../static/images/contracted/contracted_index_bg.png") no-repeat center;
  155. background-size: 100% 100%;
  156. height: 100vh;
  157. padding: 0 4vw;
  158. overflow: hidden;
  159. }
  160. /deep/ .van-nav-bar{
  161. background: transparent;
  162. }
  163. /deep/ .van-nav-bar .van-icon{
  164. color: #000000;
  165. }
  166. /deep/ .van-hairline--bottom::after{
  167. border: none;
  168. }
  169. /deep/ .van-search__content{
  170. background: rgba(255,255,255,.5);
  171. }
  172. /deep/ .van-search{
  173. padding: 0;
  174. flex: 1;
  175. }
  176. /deep/ .van-ellipsis{
  177. overflow: initial;
  178. }
  179. .tb_main{
  180. position: relative;
  181. p{
  182. position: absolute;
  183. display: inline-block;
  184. margin-left: 10PX;
  185. }
  186. }
  187. /* .tb{
  188. font-size: 12px;
  189. color: #ff8900;
  190. background: #daf6e7;
  191. border: 1px solid #d7be6e;
  192. padding: 2PX 8PX;
  193. border-radius: 50PX;
  194. margin-right: 5PX;
  195. } */
  196. .tap_block{
  197. width: 100%;
  198. display: flex;
  199. justify-content: space-between;
  200. background: #ebfaf2;
  201. padding: 2PX 4PX;
  202. border-radius: 10PX;
  203. margin-top: 1vh;
  204. .active{
  205. background-image: linear-gradient(to right,#c6fe8b,#48e5a2);
  206. box-shadow: 0 0 10PX #cccccc;
  207. color: #333333;
  208. }
  209. p{
  210. width: 25%;
  211. text-align: center;
  212. padding: 5PX 0;
  213. border-radius: 10PX;
  214. color: #666666;
  215. }
  216. }
  217. .search_main{
  218. display: flex;
  219. margin-top: 2vh;
  220. .search_btn{
  221. background: rgba(255,255,255,.5);
  222. width: 25%;
  223. border-radius: 50PX;
  224. margin-left: 10PX;
  225. padding: 2PX;
  226. .active{
  227. background-image: linear-gradient(to right,#c6fe8b,#48e5a2);
  228. color: #333333;
  229. border-radius: 50PX;
  230. display: flex;
  231. align-items: center;
  232. justify-content: center;
  233. height: 100%;
  234. }
  235. }
  236. }
  237. .second_tap{
  238. display: flex;
  239. align-items: center;
  240. margin-top: 1vh;
  241. p{
  242. background: #dbf1ea;
  243. border: 1px solid #cdcdcd;
  244. color: #5f5f5f;
  245. padding: 5PX 15PX;
  246. margin-right: 3vw;
  247. border-radius: 50PX;
  248. }
  249. .active{
  250. background: #99eecb;
  251. border-color: #48e5a2;
  252. color: #333333;
  253. }
  254. }
  255. .list_main{
  256. margin-top: 2vh;
  257. overflow-y: scroll;
  258. text-align: center;
  259. background: #ffffff;
  260. border-top-left-radius: 10PX;
  261. border-top-right-radius: 10PX;
  262. height: 88vh;
  263. .btn{
  264. background-image: linear-gradient(to right,#c6fe8b,#48e5a2);
  265. box-shadow: 0 0 10PX #cccccc;
  266. padding: 10PX 0PX;
  267. border-radius: 50PX;
  268. display: inline-block;
  269. width: 40%;
  270. margin-top: 2vh;
  271. }
  272. }
  273. </style>