移动端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

307 lines
8.9 KiB

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