InsuranceAgreementForm.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. <template>
  2. <div>
  3. <zj-form-container ref="formRef" :formData="formData" :formRules="formRules">
  4. <zj-form-module title="保险基础信息" label-width="120px" :formData="formData" :formItems="formItems" :column="3">
  5. </zj-form-module>
  6. <zj-form-module title="关联保险方案" label-width="0px" :formData="formData" :formItems="items2"> </zj-form-module>
  7. </zj-form-container>
  8. <div v-if="type === 0 || type === 1" style="text-align: right">
  9. <el-button size="mini" @click="submit">提交</el-button>
  10. <el-button size="mini" @click="reset">重置</el-button>
  11. </div>
  12. </div>
  13. </template>
  14. <script>
  15. import { insureAgreeDetail, insureAgreeAdd, insureAgreeUpdate } from '@/api/InsuranceManagement.js'
  16. import pagingTransfer from '@/components/paging-transfer.vue'
  17. import { EventBus } from '@/utils/eventBus'
  18. import { required } from '@/components/template/rules_verify.js'
  19. import { insureList } from '@/api/InsuranceManagement.js'
  20. export default {
  21. props: {
  22. type: {
  23. type: Number,
  24. default: null
  25. },
  26. item: {
  27. type: Object,
  28. default: null
  29. }
  30. },
  31. data() {
  32. return {
  33. disabled: this.type === 2,
  34. // 表单数据
  35. formData: {
  36. context: '',
  37. agreementType: '',
  38. agreementName: '',
  39. status: 'ON',
  40. policy: []
  41. },
  42. formRules: {
  43. context: [{ required: true, message: '请输入', trigger: 'blur' }],
  44. agreementType: [{ required: true, message: '请输入', trigger: 'blur' }],
  45. agreementName: [{ required: true, message: '请输入', trigger: 'blur' }],
  46. status: [{ required: true, message: '请输入', trigger: 'blur' }]
  47. },
  48. formInline: {
  49. policyName: '',
  50. policyNumber: '',
  51. startTime: '',
  52. endTime: ''
  53. },
  54. itemsList: []
  55. }
  56. },
  57. computed: {
  58. formItems() {
  59. return [
  60. {
  61. name: 'el-radio',
  62. options: [
  63. { label: '投保须知', value: '投保须知' },
  64. { label: '保险合同说明', value: '保险合同说明' }
  65. ],
  66. events: {
  67. change: val => {
  68. this.formData.context = ''
  69. }
  70. },
  71. md: 12,
  72. attributes: { disabled: this.type !== 0 },
  73. formItemAttributes: { label: '协议类型', prop: 'agreementType' }
  74. },
  75. {
  76. name: 'el-radio',
  77. options: [
  78. { label: '启用', value: 'ON' },
  79. { label: '禁用', value: 'OFF' }
  80. ],
  81. md: 12,
  82. attributes: { disabled: this.disabled },
  83. formItemAttributes: { label: '状态', prop: 'status' }
  84. },
  85. {
  86. name: 'el-input',
  87. md: 24,
  88. attributes: { disabled: this.disabled },
  89. formItemAttributes: { label: '协议名称', prop: 'agreementName' }
  90. },
  91. {
  92. name: 'slot-component',
  93. md: 24,
  94. attributes: { disabled: this.disabled },
  95. formItemAttributes: { label: '协议内容', prop: 'context' },
  96. render: (h, { props }) => {
  97. var { formData } = props
  98. return (
  99. <v-quill-editor
  100. disabled={this.disabled}
  101. value={formData.context}
  102. onInput={val => {
  103. formData.context = val
  104. }}
  105. ></v-quill-editor>
  106. )
  107. }
  108. }
  109. ]
  110. },
  111. items2() {
  112. return [
  113. {
  114. name: 'slot-component',
  115. md: 24,
  116. attributes: {},
  117. formItemAttributes: { label: '', 'label-width': '0px', prop: 'policy', rules: [...required] },
  118. render: (h, { props, onInput }) => {
  119. var { formData } = props
  120. return (
  121. <div>
  122. <div>
  123. <el-form
  124. size="mini"
  125. inline={true}
  126. value={this.formInline}
  127. onInput={v => {
  128. this.formInline = v
  129. }}
  130. label-width="0px"
  131. >
  132. <el-form-item label="">
  133. <el-input
  134. value={this.formInline.policyName}
  135. onInput={v => {
  136. this.formInline.policyName = v
  137. }}
  138. placeholder="保单名称"
  139. ></el-input>
  140. </el-form-item>
  141. <el-form-item label="">
  142. <el-input
  143. value={this.formInline.policyNumber}
  144. onInput={v => {
  145. this.formInline.policyNumber = v
  146. }}
  147. placeholder="保单编号"
  148. ></el-input>
  149. </el-form-item>
  150. <el-form-item label="">
  151. <el-date-picker
  152. value={this.formInline.startTime}
  153. onInput={v => {
  154. this.formInline.startTime = v
  155. }}
  156. type="datetime"
  157. placeholder="生效日期"
  158. ></el-date-picker>
  159. </el-form-item>
  160. <el-form-item label="">
  161. <el-date-picker
  162. value={this.formInline.endTime}
  163. onInput={v => {
  164. this.formInline.endTime = v
  165. }}
  166. type="datetime"
  167. placeholder="结束日期"
  168. ></el-date-picker>
  169. </el-form-item>
  170. <el-form-item>
  171. <el-button
  172. type="primary"
  173. onClick={() => {
  174. EventBus.$emit('handlePaginationCallBack33')
  175. }}
  176. >
  177. 查询
  178. </el-button>
  179. <el-button
  180. onClick={() => {
  181. this.formInline.policyName = ''
  182. this.formInline.policyNumber = ''
  183. this.formInline.startTime = ''
  184. this.formInline.endTime = ''
  185. this.$nextTick(() => {
  186. EventBus.$emit('handlePaginationCallBack33')
  187. })
  188. }}
  189. >
  190. 重置
  191. </el-button>
  192. </el-form-item>
  193. </el-form>
  194. </div>
  195. <pagingTransfer
  196. handlePaginationCallBackKey="handlePaginationCallBack33"
  197. value={this.formData.policy}
  198. onInput={v => {
  199. this.formData.policy = v
  200. }}
  201. left-columns={[
  202. { id: 'policyName', label: '保单名称', width: '' },
  203. { id: 'policyNumber', label: '保单编号', width: '' },
  204. { id: 'policyPrice', label: '保单金额', width: '' },
  205. { id: 'typeName_', label: '保单类型', width: '' },
  206. { id: 'startTime', label: '生效时间', width: '' },
  207. { id: 'endTime', label: '结束时间', width: '' }
  208. ]}
  209. right-columns={[
  210. { id: 'policyName', label: '保单名称', width: '' },
  211. { id: 'policyNumber', label: '保单编号', width: '' },
  212. { id: 'policyPrice', label: '保单金额', width: '' },
  213. { id: 'typeName_', label: '保单类型', width: '' },
  214. { id: 'startTime', label: '生效时间', width: '' },
  215. { id: 'endTime', label: '结束时间', width: '' }
  216. ]}
  217. show-pagination={false}
  218. pagination-call-back={this.paginationCallback}
  219. title-texts={['待选项', '已选项']}
  220. min-height="300px"
  221. table-row-key={row => row.id}
  222. />
  223. </div>
  224. )
  225. }
  226. }
  227. ]
  228. }
  229. },
  230. created() {
  231. // 获取详情
  232. if (this.type !== 0) {
  233. insureAgreeDetail({
  234. id: this.item.id
  235. }).then(res => {
  236. for (var key in res.data) {
  237. this.formData[key] = res.data[key]
  238. }
  239. this.formData.policy = res.data.policy.map(item => ({
  240. ...item,
  241. typeName_: { AC: '意外险', DS: '第三者责任险' }[item.type]
  242. }))
  243. })
  244. }
  245. },
  246. methods: {
  247. paginationCallback({ pageIndex, pageSize }) {
  248. return new Promise(resolve => {
  249. var params = [{ param: 'is_buy', compare: '=', value: 'YES' }]
  250. if (this.formInline.policyName) {
  251. params.push({
  252. param: 'policy_name',
  253. compare: 'like',
  254. value: this.formInline.policyName
  255. })
  256. }
  257. if (this.formInline.policyNumber) {
  258. params.push({
  259. param: 'policy_number',
  260. compare: 'like',
  261. value: this.formInline.policyNumber
  262. })
  263. }
  264. if (this.formInline.startTime) {
  265. params.push({
  266. param: 'start_time',
  267. compare: 'like',
  268. value: this.formInline.startTime
  269. })
  270. }
  271. if (this.formInline.endTime) {
  272. params.push({
  273. param: 'end_time',
  274. compare: 'like',
  275. value: this.formInline.endTime
  276. })
  277. }
  278. insureList({ pageNum: 1, pageSize: -1, params: params }).then(res => {
  279. resolve({
  280. total: res.data.total,
  281. data: res.data.records.map(item => ({
  282. ...item,
  283. typeName_: { AC: '意外险', DS: '第三者责任险' }[item.type]
  284. }))
  285. })
  286. })
  287. })
  288. },
  289. submit() {
  290. this.$refs['formRef'].validate(valid => {
  291. if (valid) {
  292. ;(this.formData.id ? insureAgreeUpdate : insureAgreeAdd)({
  293. ...this.formData
  294. }).then(res => {
  295. this.$message({
  296. type: 'success',
  297. message: `保存成功!`
  298. })
  299. this.$emit('success')
  300. })
  301. } else {
  302. console.log('error submit!!')
  303. return false
  304. }
  305. })
  306. },
  307. reset() {
  308. Object.assign(this.$data, this.$options.data())
  309. }
  310. }
  311. }
  312. </script>
  313. <style lang="scss" scoped></style>