addSanfangHetong.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. <template>
  2. <view class="sfht-info-page">
  3. <view class="icon-title-navBar-box">
  4. <view @click="goUpPage" class="nav-bar-icon"></view>
  5. <text class="nav-bar-title">新增三方合同</text>
  6. </view>
  7. <!-- form -->
  8. <view class="sfht-form-box">
  9. <!-- 合同模板 -->
  10. <view class="form-label-select form-radius-box">
  11. <view class="phone-form-label"><text class="form-label-require"></text>合同模板
  12. <i @click="handlePreviewPdf">预览</i></view>
  13. <picker :range="data.mobanList" mode='selector' :value="data.mobanIndex" range-key="name"
  14. @change="onMobanSelect" class="select-picker-box">
  15. <view class="form-radio-select">
  16. <view v-if="data.mobanList[data.mobanIndex]">{{ data.mobanList[data.mobanIndex].name}}</view>
  17. <icon></icon>
  18. </view>
  19. </picker>
  20. </view>
  21. <!-- 客户信息 -->
  22. <kehuCardVue></kehuCardVue>
  23. <!-- 家政人员 -->
  24. <jiazhengCardVue></jiazhengCardVue>
  25. <template v-if="data.mobanIndex == 0">
  26. <!-- 合同信息 -->
  27. <hetongCardVue></hetongCardVue>
  28. <!-- 其他约定 -->
  29. <qiTaYueDingVue></qiTaYueDingVue>
  30. <!-- 家政签名 -->
  31. <qianMingVue></qianMingVue>
  32. </template>
  33. <common-dialog ref="commonDialogRef" title="提示" :showQuxiao="false" content="请完善社会信用代码与服务监督热线"
  34. @confirm-btn="handleConfirm"></common-dialog>
  35. </view>
  36. <view class="sfht-info-btn-box">
  37. <button type="default" class="phone-green-btn" @click="handleAdd"
  38. v-if="data.type == 'addHetong'">创建合同</button>
  39. <button type="default" class="phone-green-btn" @click="handleUpdate"
  40. v-if="data.type == 'editorHetong'">更新合同</button>
  41. </view>
  42. <pdfPreviewVue ref="pdfRef"></pdfPreviewVue>
  43. </view>
  44. </template>
  45. <script setup>
  46. import {
  47. ref,
  48. reactive,
  49. nextTick
  50. } from "vue";
  51. import {
  52. onLoad
  53. } from "@dcloudio/uni-app";
  54. import * as httpApi from "@/api/sanfang.js"
  55. import hetongCardVue from "./components/hetongCard.vue";
  56. import jiazhengCardVue from "./components/jiazhengCard.vue";
  57. import kehuCardVue from "./components/kehuCard.vue";
  58. import qianMingVue from "./components/qianMing.vue";
  59. import qiTaYueDingVue from "./components/qiTaYueDing.vue";
  60. import commonDialog from '@/components/dialog/commonDialog.vue';
  61. import pdfPreviewVue from "./components/pdfPreview.vue";
  62. import {toast} from "@/utils/common.js"
  63. import {
  64. useHetong
  65. } from "./useHetong.js"
  66. import {
  67. getSanfangInfo
  68. } from "../../../api/sanfang";
  69. const {
  70. provideHetong
  71. } = useHetong()
  72. const emits = defineEmits('select-kehu')
  73. const data = reactive({
  74. mobanList: [],
  75. mobanIndex: null,
  76. hetong: {
  77. htId: null, // 合同模板id
  78. baochou: '', // 基本月报酬
  79. qita: '', // 其他服务
  80. bingren: '', // 病人病情
  81. dizhi: '', // 服务地址
  82. fafangri: '', // 工资发放日
  83. fangshi: 1, // 服务方式,1住家型,2非住家型
  84. fsShijian: '', // 非住家型服务时间
  85. fuwufei: '', // 服务费
  86. fuwufeiRate: '', // 服务费百分比
  87. fzHaizi: '', // 辅助照顾孩子人数
  88. fzHzNianling: '', // 辅助照顾孩子年龄
  89. huli: '', // 产妇护理
  90. jiabingEndDate: '', // 甲丙服务结束时间
  91. jiabingStartDate: '', // 甲丙服务开始时间
  92. jiandurexian: '', // 服务监督热线
  93. jiayiEndDate: '', // 甲乙服务结束时间
  94. jiayiStartDate: '', // 甲乙服务开始时间
  95. khId: '', // 客户ID
  96. khName: '', // 客户姓名
  97. khIdcard: '', // 客户身份证号
  98. laoren: '', // 照顾老人人数
  99. leixing: 1, // 服务类型,1普通家务保姆,2钟点工保姆,3育儿嫂,4其他
  100. lrnianling: '', // 照顾老人年龄: 60,70,80
  101. lxName: '', // 其他服务类型名称
  102. mianji: '', // 住房面积
  103. qzHaizi: '', // 全职照顾孩子人数
  104. qzHzNianliang: '', // 全职照顾孩子年龄
  105. realName: '', // 家政姓名
  106. renkou: '', // 常驻人口数
  107. tianshu: '', // 基本月报酬天数
  108. userId: '', // 家政员ID
  109. xinyongdaima: '', // 统一社会信用代码
  110. xiuxi: '', // 休息天数
  111. khUserName: '', // 客户电话
  112. shentiqingkuang: 0, // 身体状态,1 能自理 ,2半自理, 3不能自理
  113. beizhu: '', // 备注
  114. qianmingBase64: '',
  115. id: null,
  116. jutidizhi: '',
  117. },
  118. type: null,
  119. timer: null
  120. })
  121. const commonDialogRef = ref(null)
  122. // 穿透式传参
  123. provideHetong(data)
  124. const jzRef = ref(null)
  125. const pdfRef = ref(null)
  126. function handleSelct(code) {
  127. if (code == 'kh') {
  128. khRef.value.handleShow();
  129. } else {
  130. jzRef.value.handleShow();
  131. }
  132. }
  133. function handlePreviewPdf() {
  134. const id = data.mobanList[data.mobanIndex] && data.mobanList[data.mobanIndex].id;
  135. if (id) {
  136. httpApi.getHetongSanfangMoban({id: id}).then(res => {
  137. pdfRef.value.showPDF(res.data.base64List)
  138. }).finally(() => {
  139. })
  140. }
  141. }
  142. function goUpPage() {
  143. uni.navigateBack()
  144. }
  145. function getMoban() {
  146. return httpApi.getMobanList().then(res => {
  147. data.mobanList = res.data;
  148. // 初始化默认选中
  149. data.mobanIndex = 0;
  150. })
  151. }
  152. function onMobanSelect(da) {
  153. data.mobanIndex = da.detail.value
  154. }
  155. function handleQianming(da) {
  156. data.qianming = da;
  157. }
  158. function handleAdd() {
  159. if (!data.hetong.jiabingStartDate || data.hetong.jiabingEndDate || data.hetong.qianmingBase64) {
  160. toast('请确认合同必填项是否完整')
  161. return;
  162. }
  163. uni.showLoading({
  164. title: '创建中...',
  165. mask: true
  166. });
  167. const opt = Object.assign({}, {
  168. ...data.hetong,
  169. htId: data.mobanList[data.mobanIndex].id
  170. })
  171. httpApi.getSanfangAdd(opt).then(res => {
  172. if (res.data) {
  173. uni.hideLoading()
  174. uni.showToast({
  175. title: "创建成功",
  176. duration: 2000,
  177. success() {
  178. setTimeout(() => {
  179. uni.navigateBack()
  180. }, 2000)
  181. }
  182. })
  183. }
  184. }).catch(() => {
  185. uni.hideLoading()
  186. }).
  187. finally(() => {
  188. clearTimeout(data.timer);
  189. data.timer = null;
  190. })
  191. }
  192. function handleUpdate() {
  193. if (!data.hetong.jiabingStartDate || data.hetong.jiabingEndDate || data.hetong.qianmingBase64) {
  194. toast('请确认合同必填项是否完整')
  195. return;
  196. }
  197. uni.showLoading({
  198. title: '更新中...',
  199. mask: true
  200. });
  201. const opt = Object.assign({}, {
  202. ...data.hetong,
  203. htId: data.mobanList[data.mobanIndex].id
  204. })
  205. httpApi.getSanfangUpdate(opt).then(res => {
  206. if (res.data) {
  207. uni.hideLoading()
  208. uni.showToast({
  209. title: "更新成功",
  210. duration: 2000,
  211. mask: true,
  212. success() {
  213. setTimeout(() => {
  214. uni.navigateBack()
  215. }, 2000)
  216. }
  217. })
  218. }
  219. }).catch(() => {
  220. uni.hideLoading()
  221. })
  222. }
  223. function handleConfirm() {
  224. uni.redirectTo({
  225. url: '/pages/admin/my/jzInfo' // 跳转完善
  226. })
  227. }
  228. onLoad((option) => {
  229. const {
  230. flag,
  231. id
  232. } = option;
  233. if (flag) {
  234. data.type = 'editorHetong'
  235. getMoban().then(() => {
  236. httpApi.getSanfangInfo({
  237. id
  238. }).then(res => {
  239. Object.assign(data.hetong, res.data)
  240. console.log('ccccc', res.data)
  241. })
  242. })
  243. } else {
  244. data.type = 'addHetong'
  245. httpApi.getSanfangCheck().then(res => {
  246. if (res.data) {
  247. getMoban();
  248. } else {
  249. commonDialogRef.value.handleShow()
  250. }
  251. })
  252. }
  253. })
  254. </script>
  255. <style>
  256. </style>