dialog.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. <style scoped lang="scss">
  2. </style>
  3. <template>
  4. <div class="system-dialog-container">
  5. <el-dialog
  6. :title="state.dialog.title"
  7. v-model="state.dialog.isShowDialog"
  8. width="820px"
  9. draggable
  10. destroy-on-close
  11. :close-on-click-modal="false"
  12. @close="onClose"
  13. align-center>
  14. <el-form
  15. inline
  16. :model="state.ruleForm"
  17. :rules="state.rules"
  18. ref="formRef"
  19. size="default"
  20. label-width="125px"
  21. class="mt5">
  22. <el-form-item label="站点名称" prop="stationName">
  23. <el-input
  24. v-model.trim="state.ruleForm.stationName"
  25. placeholder="站点名称"
  26. clearable
  27. class="wd200">
  28. </el-input>
  29. </el-form-item>
  30. <el-form-item label="站点照片" prop="pictures">
  31. <ext-upload v-model="state.ruleForm.pictures"></ext-upload>
  32. <!-- <el-input
  33. v-model.trim="state.ruleForm.pictures"
  34. placeholder="站点照片"
  35. clearable
  36. class="wd200">
  37. </el-input>-->
  38. </el-form-item>
  39. <el-form-item label="en+充电站id" prop="stationId">
  40. <el-input
  41. v-model.trim="state.ruleForm.stationId"
  42. placeholder="en+充电站id"
  43. clearable
  44. class="wd200">
  45. </el-input>
  46. </el-form-item>
  47. <el-form-item label="en+运营商id" prop="operatorId">
  48. <el-input
  49. v-model.trim="state.ruleForm.operatorId"
  50. placeholder="en+运营商id"
  51. clearable
  52. class="wd200">
  53. </el-input>
  54. </el-form-item>
  55. <el-form-item label="设备机构代码" prop="equipmentOwnerId">
  56. <el-input
  57. v-model.trim="state.ruleForm.equipmentOwnerId"
  58. placeholder="设备所属运营平台组织机构代码"
  59. clearable
  60. class="wd200">
  61. </el-input>
  62. </el-form-item>
  63. <el-form-item label="充电中国家代码" prop="countryCode">
  64. <el-input
  65. v-model.trim="state.ruleForm.countryCode"
  66. placeholder="充电中国家代码:CN"
  67. clearable
  68. class="wd200">
  69. </el-input>
  70. </el-form-item>
  71. <el-form-item label="省市辖区编码" prop="areaCode">
  72. <el-input
  73. v-model.trim="state.ruleForm.areaCode"
  74. placeholder="充电站省市辖区编码"
  75. clearable
  76. class="wd200">
  77. </el-input>
  78. </el-form-item>
  79. <el-form-item label="地址" prop="address" class="w100">
  80. <el-input
  81. v-model.trim="state.ruleForm.address"
  82. placeholder="地址"
  83. clearable
  84. class="w100">
  85. </el-input>
  86. </el-form-item>
  87. <el-form-item label="站点电话" prop="stationTel">
  88. <el-input
  89. v-model.trim="state.ruleForm.stationTel"
  90. placeholder="站点电话"
  91. clearable
  92. class="wd200">
  93. </el-input>
  94. </el-form-item>
  95. <el-form-item label="服务电话" prop="serviceTel">
  96. <el-input
  97. v-model.trim="state.ruleForm.serviceTel"
  98. placeholder="服务电话"
  99. clearable
  100. class="wd200">
  101. </el-input>
  102. </el-form-item>
  103. <el-form-item label="站点类型" prop="stationType">
  104. <ext-d-select
  105. type="Station.type"
  106. v-model.trim="state.ruleForm.stationType"
  107. placeholder="站点类型"
  108. clearable
  109. class="wd200">
  110. </ext-d-select>
  111. </el-form-item>
  112. <el-form-item label="站点状态" prop="stationStatus">
  113. <ext-d-select
  114. v-model.trim="state.ruleForm.stationStatus"
  115. placeholder="站点状态"
  116. type="Station.status"
  117. clearable
  118. class="wd200">
  119. </ext-d-select>
  120. </el-form-item>
  121. <el-form-item label="充电车位数量" prop="parkingNum">
  122. <el-input
  123. v-model.trim="state.ruleForm.parkingNum"
  124. placeholder="充电车位数量"
  125. clearable
  126. class="wd200">
  127. </el-input>
  128. </el-form-item>
  129. <el-form-item label="充电桩位置坐标" prop="location">
  130. <el-input
  131. v-model.trim="state.ruleForm.location"
  132. placeholder="充电桩位置坐标"
  133. clearable
  134. class="wd200">
  135. </el-input>
  136. </el-form-item>
  137. <el-form-item label="建设场所" prop="construction">
  138. <ext-d-select
  139. type="Station.construction"
  140. v-model.trim="state.ruleForm.construction"
  141. placeholder="建设场所:1:居民区 2:公共机构 3:企事业单位 4:写字楼 5:工业园区 6:交通枢纽 7:大型文体设施 8:城市绿地 9:大型建筑配建停车场 10:路边停车位 11:城际高速服务区 255:其他"
  142. clearable
  143. class="wd200">
  144. </ext-d-select>
  145. </el-form-item>
  146. <el-form-item label="充电费描述" prop="electricityFee">
  147. <el-input
  148. v-model.trim="state.ruleForm.electricityFee"
  149. placeholder="充电费描述"
  150. clearable
  151. class="wd200">
  152. </el-input>
  153. </el-form-item>
  154. <el-form-item label="服务费率描述" prop="serviceFee">
  155. <el-input
  156. v-model.trim="state.ruleForm.serviceFee"
  157. placeholder="服务费率描述"
  158. clearable
  159. class="wd200">
  160. </el-input>
  161. </el-form-item>
  162. <el-form-item label="停车费" prop="parkFee">
  163. <el-input
  164. v-model.trim="state.ruleForm.parkFee"
  165. placeholder="停车费"
  166. clearable
  167. class="wd200">
  168. </el-input>
  169. </el-form-item>
  170. <el-form-item label="支付方式" prop="payment">
  171. <el-input
  172. v-model.trim="state.ruleForm.payment"
  173. placeholder="支付方式:刷卡、线上、现金(电子钱包类卡为刷卡、身份鉴权卡、微信/支付宝、APP为线上)"
  174. clearable
  175. class="wd200">
  176. </el-input>
  177. </el-form-item>
  178. <el-form-item label="是否支持预约" prop="supportOrder">
  179. <el-input
  180. v-model.trim="state.ruleForm.supportOrder"
  181. placeholder="是否支持预约:0:不支持 1:支持"
  182. clearable
  183. class="wd200">
  184. </el-input>
  185. </el-form-item>
  186. <el-form-item label="备注" prop="remark">
  187. <el-input
  188. v-model.trim="state.ruleForm.remark"
  189. placeholder="备注"
  190. clearable
  191. class="wd200">
  192. </el-input>
  193. </el-form-item>
  194. <el-form-item label="站点引导" prop="siteGuide" class="w100">
  195. <el-input
  196. v-model.trim="state.ruleForm.siteGuide"
  197. placeholder="站点引导"
  198. clearable
  199. type="textarea"
  200. class="w100">
  201. </el-input>
  202. </el-form-item>
  203. <el-form-item label="营业时间描述" prop="businessHours" class="w100">
  204. <el-input
  205. v-model.trim="state.ruleForm.businessHours"
  206. placeholder="营业时间描述"
  207. type="textarea"
  208. clearable
  209. class="w100">
  210. </el-input>
  211. </el-form-item>
  212. <el-form-item label="使用车型描述" prop="matchCars" class="w100">
  213. <el-input
  214. v-model.trim="state.ruleForm.matchCars"
  215. placeholder="使用车型描述"
  216. clearable
  217. type="textarea"
  218. class="w100">
  219. </el-input>
  220. </el-form-item>
  221. <el-form-item label="楼层及数量描述" prop="parkInfo" class="w100">
  222. <el-input
  223. v-model.trim="state.ruleForm.parkInfo"
  224. placeholder="车位楼层及数量描述"
  225. clearable
  226. type="textarea"
  227. class="w100">
  228. </el-input>
  229. </el-form-item>
  230. </el-form>
  231. <template #footer>
  232. <div class="dialog-footer">
  233. <el-button @click="onCancel" size="default">取 消</el-button>
  234. <el-button :loading="state.btnLoading" type="primary" @click="onSubmit" size="default">{{ state.dialog.submitTxt }}</el-button>
  235. </div>
  236. </template>
  237. </el-dialog>
  238. </div>
  239. </template>
  240. <script setup lang="ts" name="StationDialog">
  241. import {defineAsyncComponent, reactive, onMounted, ref} from 'vue';
  242. import {Msg} from "/@/utils/message";
  243. import {$body, $get} from "/@/utils/request";
  244. import u from '/@/utils/u'
  245. import ExtDSelect from "/@/components/form/ExtDSelect.vue";
  246. import ExtUpload from "/@/components/form/ExtUpload.vue";
  247. // 引入组件
  248. const ExtDetailForm = defineAsyncComponent(() => import('/@/components/form/ExtDetailForm.vue'));
  249. // 定义子组件向父组件传值/事件
  250. const emit = defineEmits(['refresh']);
  251. const formRef = ref();
  252. //定义初始变量,重置使用
  253. const initState = ()=>({
  254. ruleForm: {
  255. id:0
  256. },
  257. btnLoading: false,
  258. dialog: {
  259. isShowDialog: false,
  260. type: '',
  261. title: '',
  262. submitTxt: '',
  263. },
  264. rules: {},
  265. })
  266. // 定义变量内容
  267. const state = reactive(initState());
  268. // 打开弹窗
  269. const open = (action: string='add', row: any) => {
  270. state.dialog.title = u.dialog.actions[action].title +"『充电站信息』"
  271. state.dialog.submitTxt = u.dialog.actions[action].btn +"『充电站信息』"
  272. state.dialog.isShowDialog = true;
  273. state.ruleForm = Object.assign(state.ruleForm,row);
  274. };
  275. // 关闭弹窗
  276. const onClose = () => {
  277. state.dialog.isShowDialog = false;
  278. Object.assign(state,initState())
  279. };
  280. // 取消
  281. const onCancel = () => {
  282. onClose();
  283. };
  284. // 提交
  285. const onSubmit = () => {
  286. formRef.value.validate((valid:boolean) => {
  287. if(valid){
  288. state.btnLoading = true;
  289. const url = state.ruleForm.id > 0 ? "station/modify" : "station/add"
  290. let params = {
  291. stationId:state.ruleForm.stationId,
  292. pictures:state.ruleForm.pictures
  293. }
  294. $body(url, params).then(() => {
  295. state.btnLoading = false;
  296. Msg.message('操作成功');
  297. console.log('submit!')
  298. onClose();
  299. emit('refresh');
  300. })
  301. }
  302. }).catch(() => {
  303. state.btnLoading = false;
  304. Msg.message('请先完整填写表单', 'error');
  305. })
  306. };
  307. const handleFormChange = (formData: any) => {
  308. console.log(formData)
  309. }
  310. // 初始化表格数据
  311. /*const loadData = (id: number) => {
  312. $get(`station/detail/${id}`).then((res: any) => {
  313. state.ruleForm = res;
  314. })
  315. }*/
  316. // 暴露变量
  317. defineExpose({
  318. open
  319. });
  320. </script>