dialog.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. <style scoped lang="scss">
  2. </style>
  3. <template>
  4. <div class="system-dialog-container">
  5. <el-drawer
  6. :title="state.dialog.title"
  7. v-model="state.dialog.isShowDialog"
  8. size="600"
  9. class="pd10"
  10. append-to-body
  11. destroy-on-close
  12. :close-on-click-modal="false"
  13. >
  14. <el-form
  15. inline
  16. :model="state.ruleForm"
  17. :rules="state.rules"
  18. label-position="top"
  19. ref="formRef"
  20. size="default"
  21. label-width="100px"
  22. class="mt5">
  23. <el-form-item label="账户名" prop="accountName">
  24. <el-input
  25. v-model="state.ruleForm.accountName"
  26. placeholder="账户名"
  27. clearable
  28. class="wd200">
  29. </el-input>
  30. </el-form-item>
  31. <el-form-item label="客户名称" prop="adminUserName">
  32. <el-input
  33. v-model="state.ruleForm.adminUserName"
  34. placeholder="客户名称"
  35. clearable
  36. class="wd200">
  37. </el-input>
  38. </el-form-item>
  39. <el-form-item label="关联客户" prop="adminUserId">
  40. <ext-select
  41. v-model="state.ruleForm.adminUserId"
  42. placeholder="关联用户"
  43. url="admin-user/list"
  44. url-method="get"
  45. label-key="nickname"
  46. clearable
  47. class="wd200 ">
  48. </ext-select>
  49. <!-- <el-input
  50. v-model="state.ruleForm.adminUserId"
  51. placeholder="客户用户id"
  52. clearable
  53. class="wd200">
  54. </el-input>-->
  55. </el-form-item>
  56. <el-form-item label="管理站点" prop="stationId">
  57. <ext-select
  58. v-model="state.ruleForm.stationId"
  59. placeholder="关联站点"
  60. url="station/listStation"
  61. url-method="get"
  62. label-key="stationName"
  63. value-key="stationId"
  64. data-key=""
  65. clearable
  66. class="wd200 ">
  67. </ext-select>
  68. <!-- <el-input
  69. v-model="state.ruleForm.stationId"
  70. placeholder="站点id"
  71. clearable
  72. class="wd200">
  73. </el-input>-->
  74. </el-form-item>
  75. <el-form-item label="状态" prop="status">
  76. <ext-d-select
  77. v-model="state.ruleForm.status"
  78. placeholder="状态"
  79. type="Investor.status"
  80. clearable
  81. class="wd200 "/>
  82. </el-form-item>
  83. <el-form-item label="电话号码" prop="telephone">
  84. <el-input
  85. v-model="state.ruleForm.telephone"
  86. placeholder="电话号码"
  87. clearable
  88. class="wd200">
  89. </el-input>
  90. </el-form-item>
  91. <el-form-item label="银行卡号" prop="bankCardNo">
  92. <el-input
  93. v-model="state.ruleForm.bankCardNo"
  94. placeholder="银行卡号"
  95. clearable
  96. class="wd200">
  97. </el-input>
  98. </el-form-item>
  99. <el-form-item label="开户行名称" prop="bankName" >
  100. <el-input
  101. v-model="state.ruleForm.bankName"
  102. placeholder="开户行名称"
  103. clearable
  104. class="wd200">
  105. </el-input>
  106. </el-form-item>
  107. <el-form-item label="税号" prop="taxNo">
  108. <el-input
  109. v-model="state.ruleForm.taxNo"
  110. placeholder="税号"
  111. clearable
  112. class="wd200">
  113. </el-input>
  114. </el-form-item>
  115. <el-form-item label="增值税率" prop="vatRate">
  116. <el-input
  117. v-model="state.ruleForm.vatRate"
  118. placeholder="增值税率 0.06表示6%"
  119. clearable
  120. class="wd200">
  121. </el-input>
  122. </el-form-item>
  123. <el-form-item label="电损承担比例 (0.30表示30%)" prop="elecLossProportion">
  124. <el-input
  125. v-model="state.ruleForm.elecLossProportion"
  126. placeholder="电损承担比例 0.30表示30%"
  127. clearable
  128. class="wd200">
  129. </el-input>
  130. </el-form-item>
  131. <el-form-item label="分成比例 (0.45表示45%)" prop="splittingProportion">
  132. <el-input
  133. v-model="state.ruleForm.splittingProportion"
  134. placeholder="分成比例 0.45表示45%"
  135. clearable
  136. class="wd200">
  137. </el-input>
  138. </el-form-item>
  139. <!-- <el-form-item label="站点名称" prop="stationName">
  140. <el-input
  141. v-model="state.ruleForm.stationName"
  142. placeholder="站点名称"
  143. clearable
  144. class="wd200">
  145. </el-input>
  146. </el-form-item>-->
  147. <el-form-item label="备注" prop="remark" class="w100">
  148. <el-input
  149. v-model="state.ruleForm.remark"
  150. placeholder="备注"
  151. clearable
  152. :rows="3"
  153. type="textarea"
  154. class="w100">
  155. </el-input>
  156. </el-form-item>
  157. </el-form>
  158. <template #footer>
  159. <div class="dialog-footer">
  160. <el-button @click="onCancel" size="default">取 消</el-button>
  161. <el-button :loading="state.btnLoading" type="primary" @click="onSubmit" size="default">{{ state.dialog.submitTxt }}</el-button>
  162. </div>
  163. </template>
  164. </el-drawer>
  165. </div>
  166. </template>
  167. <script setup lang="ts" name="InvestorInfoDialog">
  168. import {defineAsyncComponent, reactive, onMounted, ref} from 'vue';
  169. import {Msg} from "/@/utils/message";
  170. import {$body, $get} from "/@/utils/request";
  171. import u from '/@/utils/u'
  172. import ExtSelect from "/@/components/form/ExtSelect.vue";
  173. import ExtDSelect from "/@/components/form/ExtDSelect.vue";
  174. // 定义子组件向父组件传值/事件
  175. const emit = defineEmits(['refresh']);
  176. const formRef = ref();
  177. //定义初始变量,重置使用
  178. const initState = () => ({
  179. ruleForm: {
  180. id: 0
  181. },
  182. btnLoading: false,
  183. dialog: {
  184. isShowDialog: false,
  185. type: '',
  186. title: '',
  187. submitTxt: '',
  188. },
  189. rules: {
  190. telephone:[u.validator.mobile]
  191. },
  192. })
  193. // 定义变量内容
  194. const state = reactive(initState());
  195. // 打开弹窗
  196. const open = (action: string = 'add', row: any) => {
  197. state.dialog.title = u.dialog.actions[action].title + "『投资者/物业』"
  198. state.dialog.submitTxt = u.dialog.actions[action].btn + "『投资者/物业』"
  199. state.dialog.isShowDialog = true;
  200. if (action !== 'add') {
  201. loadData(row.id);
  202. }
  203. };
  204. // 关闭弹窗
  205. const onClose = () => {
  206. state.dialog.isShowDialog = false;
  207. Object.assign(state, initState())
  208. };
  209. // 取消
  210. const onCancel = () => {
  211. onClose();
  212. };
  213. // 提交
  214. const onSubmit = () => {
  215. formRef.value.validate((valid, fields) => {
  216. // console.log('basic checkForm!', valid,fields)
  217. if (valid) {
  218. state.btnLoading = true;
  219. const url = state.ruleForm.id ? "investorInfo/update" : "investorInfo/create"
  220. $body(url, state.ruleForm).then(() => {
  221. state.btnLoading = false;
  222. Msg.message('操作成功');
  223. console.log('submit!')
  224. onClose();
  225. emit('refresh');
  226. })
  227. } else {
  228. state.btnLoading = false;
  229. Msg.message('表单校验失败', 'error');
  230. }
  231. })
  232. };
  233. const handleFormChange = (formData: any) => {
  234. console.log(formData)
  235. }
  236. // 初始化表格数据
  237. const loadData = (id: any) => {
  238. $get(`investorInfo/${id}`).then((res: any) => {
  239. state.ruleForm = res;
  240. })
  241. }
  242. // 暴露变量
  243. defineExpose({
  244. open
  245. });
  246. </script>