business.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. <template>
  2. <!-- 新增、编辑 -->
  3. <cl-crud ref="Crud">
  4. <cl-upsert ref="Upsert" />
  5. </cl-crud>
  6. </template>
  7. <script lang="ts" setup>
  8. import { useCrud, useTable, useUpsert } from '@cool-vue/crud';
  9. import { useCool } from '/@/cool';
  10. import { watch } from 'vue';
  11. import { cityList } from '/@/cool/utils/city';
  12. const { service } = useCool();
  13. const emit = defineEmits(['close', 'submit']);
  14. const props = defineProps({
  15. open: {
  16. type: Boolean,
  17. default: false
  18. },
  19. mchId: {
  20. type: String,
  21. default: ''
  22. },
  23. business: {
  24. type: Object,
  25. default: null
  26. }
  27. });
  28. watch(
  29. () => props.open,
  30. () => {
  31. if (props.open) {
  32. if (props.business) {
  33. Upsert.value?.edit(props.business);
  34. } else {
  35. Upsert.value?.add();
  36. }
  37. }
  38. }
  39. );
  40. // cl-upsert
  41. const Upsert = useUpsert({
  42. items: [
  43. {
  44. label: '企业名称',
  45. prop: 'name',
  46. component: { name: 'el-input', props: { clearable: true } },
  47. required: true
  48. },
  49. {
  50. label: '类型',
  51. prop: 'type',
  52. component: {
  53. name: 'el-select',
  54. options: [
  55. { label: '其他', value: 'OTHER' },
  56. { label: '公共有限公司', value: 'PUBLIC_LIMITED_COMPANY' },
  57. { label: '合伙企业', value: 'PARTNERSHIP' },
  58. { label: '慈善机构', value: 'CHARITY' },
  59. { label: '私营有限公司', value: 'PRIVATE_LIMITED_COMPANY' },
  60. { label: '股份公司', value: 'JOINT_STOCK_COMPANY' },
  61. { label: '独资经营企业', value: 'SOLE_TRADER' },
  62. { label: '有限责任公司', value: 'LIMITED_LIABILITY' }
  63. ],
  64. props: {}
  65. },
  66. value: [],
  67. required: true
  68. },
  69. {
  70. label: '国家代码',
  71. prop: 'country_code',
  72. component: {
  73. name: 'el-select',
  74. options: cityList,
  75. props: { clearable: true }
  76. },
  77. required: true
  78. },
  79. {
  80. label: '城市',
  81. prop: 'city',
  82. component: { name: 'el-input', props: { clearable: true } },
  83. required: true
  84. },
  85. {
  86. label: '地址',
  87. prop: 'address_line',
  88. component: { name: 'el-input', props: { type: 'textarea', rows: 4 } },
  89. required: true
  90. },
  91. {
  92. label: '邮编',
  93. prop: 'post_code',
  94. component: { name: 'el-input', props: { clearable: true } },
  95. required: true
  96. },
  97. {
  98. label: '邮箱',
  99. prop: 'email',
  100. component: { name: 'el-input', props: { clearable: true } },
  101. required: true
  102. },
  103. {
  104. label: '电话',
  105. prop: 'phone_number',
  106. component: { name: 'el-input', props: { clearable: true } },
  107. required: true
  108. },
  109. {
  110. label: '注册号',
  111. prop: 'registration_number',
  112. component: { name: 'el-input', props: { clearable: true } },
  113. required: true
  114. },
  115. {
  116. label: '联系人',
  117. prop: 'contact',
  118. component: { name: 'el-input', props: { clearable: true } },
  119. required: true
  120. },
  121. {
  122. label: '注册日期',
  123. prop: 'registration_date',
  124. component: {
  125. name: 'el-date-picker',
  126. props: { type: 'date', valueFormat: 'YYYY-MM-DD' }
  127. },
  128. required: true
  129. },
  130. {
  131. label: '合作伙伴文件编号',
  132. prop: 'partners_document_number',
  133. component: { name: 'el-input', props: { clearable: true } },
  134. required: true
  135. },
  136. {
  137. label: '合作伙伴文件类型',
  138. prop: 'partners_document_type',
  139. component: {
  140. name: 'el-select',
  141. options: [
  142. { label: '护照', value: 'PASSPORT' },
  143. { label: '驾驶执照', value: 'DRIVINGLICENCE' },
  144. { label: '身份证', value: 'IDCARD' }
  145. ],
  146. props: {}
  147. },
  148. value: [],
  149. required: true
  150. },
  151. {
  152. label: '合作伙伴类型',
  153. prop: 'partners_kind',
  154. component: { name: 'el-input', props: { clearable: true } },
  155. required: true
  156. },
  157. {
  158. label: '合作伙伴名称',
  159. prop: 'partners_name',
  160. component: { name: 'el-input', props: { clearable: true } },
  161. required: true
  162. },
  163. {
  164. label: '合作伙伴百分比',
  165. prop: 'partners_percentage_share',
  166. component: { name: 'el-input', props: { clearable: true } },
  167. required: true
  168. },
  169. {
  170. label: '合作伙伴地址国家',
  171. prop: 'partners_address_country',
  172. component: { name: 'el-input', props: { clearable: true } },
  173. required: true
  174. },
  175. {
  176. label: '交易地址',
  177. prop: 'trading_address',
  178. component: { name: 'el-input', props: { type: 'textarea', rows: 4 } },
  179. required: true
  180. },
  181. {
  182. label: '交易城市',
  183. prop: 'trading_city',
  184. component: { name: 'el-input', props: { clearable: true } },
  185. required: true
  186. },
  187. {
  188. label: '交易国家',
  189. prop: 'trading_country',
  190. component: {
  191. name: 'el-select',
  192. options: cityList,
  193. props: { clearable: true }
  194. },
  195. required: true
  196. }
  197. ],
  198. dialog: {
  199. title: '企业认证'
  200. },
  201. onClose: (data, done) => {
  202. emit('close', false);
  203. done();
  204. },
  205. async onSubmit(data, { done, close, next }) {
  206. emit('submit');
  207. next({
  208. ...data,
  209. merchantId: props.mchId
  210. });
  211. }
  212. });
  213. // cl-crud
  214. const Crud = useCrud(
  215. {
  216. service: service.payment.business
  217. },
  218. app => {
  219. app.refresh();
  220. }
  221. );
  222. </script>