dialog.vue 11 KB

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