form-edit.vue 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <template>
  2. <div class="admin-authorize-editInfo">
  3. <el-dialog :title="formData.titleText" v-model="formData.isShowDialog" draggable width="769px">
  4. <el-form :model="formData.editData"
  5. :rules="rules"
  6. ref="formRef"
  7. v-loading="formData.loading"
  8. size="default"
  9. label-width="80px">
  10. <el-row :gutter="35">
  11. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
  12. <el-form-item label="油站名称" prop="oilStation">
  13. <el-input v-model="formData.editData.oilStation" placeholder="格式:message.router.xxx" clearable></el-input>
  14. </el-form-item>
  15. </el-col>
  16. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
  17. <el-form-item label="项目名称" prop="projectName">
  18. <el-input v-model="formData.editData.projectName" placeholder="格式:message.router.xxx" clearable></el-input>
  19. </el-form-item>
  20. </el-col>
  21. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
  22. <el-form-item label="设备SN" prop="sn">
  23. <el-input v-model="formData.editData.sn" placeholder="格式:message.router.xxx" clearable></el-input>
  24. </el-form-item>
  25. </el-col>
  26. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
  27. <el-form-item label="授权码" prop="key">
  28. <el-input v-model="formData.editData.key" placeholder="格式:message.router.xxx" clearable></el-input>
  29. </el-form-item>
  30. </el-col>
  31. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
  32. <el-form-item label="有效时间" prop="expiedTime">
  33. <el-date-picker
  34. v-model="formData.editData.expiedTime"
  35. type="datetime"
  36. value-format="YYYY-MM-DD HH:mm:ss"
  37. placeholder="选择有效时间"
  38. />
  39. </el-form-item>
  40. </el-col>
  41. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
  42. <el-form-item label="状态" prop="state">
  43. <el-select v-model="formData.editData.state" class="m-2" placeholder="选择状态" >
  44. <el-option
  45. v-for="item in formData.options"
  46. :key="item.value"
  47. :label="item.label"
  48. :value="item.value"
  49. />
  50. </el-select>
  51. </el-form-item>
  52. </el-col>
  53. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
  54. <el-form-item label="备注" prop="remark">
  55. <el-input v-model="formData.editData.remark" placeholder="格式:message.router.xxx" clearable type="textarea"></el-input>
  56. </el-form-item>
  57. </el-col>
  58. </el-row>
  59. </el-form>
  60. <template #footer>
  61. <span class="dialog-footer">
  62. <el-button @click="onCancel" size="default">取 消</el-button>
  63. <el-button type="primary" @click="onSubmit" size="default">{{formData.buttonText}}</el-button>
  64. </span>
  65. </template>
  66. </el-dialog>
  67. </div>
  68. </template>
  69. <script setup lang="ts">
  70. import {reactive, ref, watch} from "vue";
  71. import {oilSdkTableModel} from "/@/api/admin/deviceAuthorization/oilSdkAuthorDto";
  72. import {OilSdkAuthorAPI} from "/@/api/admin/deviceAuthorization/oilSdkAuthor";
  73. import eventBus from "/@/utils/mitt";
  74. import {FormRules} from "element-plus";
  75. enum Form {
  76. ADD,
  77. UPDATE
  78. }
  79. /**数据对象 */
  80. const formData = reactive({
  81. loading: false,
  82. formType: Form,
  83. titleText:'',
  84. buttonText:'',
  85. isShowDialog: false,
  86. editData:{} as oilSdkTableModel,
  87. /**动态表头 */
  88. dynamicColumns: [
  89. { prop: 'oilStation', label: '油站名称' },
  90. { prop: 'projectName', label: '项目名称' },
  91. { prop: 'sn', label: '设备SN号' },
  92. { prop: 'key', label: '授权码' },
  93. { prop: 'expiedTime', label: '过期时间' },
  94. { prop: 'formData', label: '状态' },
  95. { prop: 'remark', label: '备注' },
  96. ],
  97. options:[
  98. {label:'正常',value:'正常'},
  99. {label:'未授权',value:'未授权'},
  100. ]
  101. })
  102. /**有效时间选择校验*/
  103. const validateDate = (rule: any, value: any, callback: any) => {
  104. if(new Date(value).getTime() > Date.now()){
  105. callback()
  106. }else{
  107. callback(new Error('选择的时间已失效'))
  108. }
  109. }
  110. /**表单校验*/
  111. const rules = reactive<FormRules>({
  112. oilStation: [
  113. { required: true, message: '请输入油站名称', trigger: 'blur' },
  114. ],
  115. projectName: [
  116. { required: true, message: '请输入项目名称', trigger: 'blur' },
  117. ],
  118. sn: [
  119. { required: true, message: '请输入设备SN号', trigger: 'blur' },
  120. ],
  121. key: [
  122. { required: true, message: '请输入设备授权码', trigger: 'blur' },
  123. ],
  124. expiedTime: [
  125. { type: 'date', required: true, message: '请选择有效期', trigger: 'blur' },
  126. { validator: validateDate, trigger: 'blur' }
  127. ],
  128. state: [
  129. { required: true, message: '请选择状态', trigger: 'blur' },
  130. ],
  131. })
  132. const formRef = ref()
  133. const openDialog = (val) => {
  134. if(val){
  135. formData.editData = JSON.parse(JSON.stringify(val))
  136. formData.titleText = '更新授权'
  137. formData.buttonText = '更新'
  138. //更新操作
  139. formData.formType = Form.UPDATE
  140. }else {
  141. formData.editData = {} as oilSdkTableModel
  142. formData.titleText = '添加授权'
  143. formData.buttonText = '添加'
  144. //添加操作
  145. formData.formType = Form.ADD
  146. }
  147. formData.isShowDialog = true
  148. formData.isShowDialog = true
  149. }
  150. const onCancel = () => {
  151. formData.editData = {} as oilSdkTableModel
  152. formData.isShowDialog = false
  153. }
  154. /***监听弹窗关闭表单验证*/
  155. watch(() => formData.isShowDialog,(newVal) => {
  156. if(newVal) formRef.value?.resetFields()
  157. })
  158. const onSubmit = () => {
  159. formRef.value.validate(async (valid: boolean) =>{
  160. if(!valid) return
  161. formData.loading = true
  162. // eslint-disable-next-line @typescript-eslint/no-unused-vars,no-unused-vars
  163. const { projectName, state, ...newData} = formData.editData
  164. let res = {} as any
  165. if(formData.formType === Form.UPDATE){
  166. res = await new OilSdkAuthorAPI().updateForm({project: formData.editData.projectName, state: formData.editData.state === '正常' ? 1 : 0 ?? 0, ...newData},{ showSuccessMessage: true }).catch(() => {
  167. formData.loading = false
  168. })
  169. }else if(formData.formType === Form.ADD){
  170. res = await new OilSdkAuthorAPI().addForm({project: formData.editData.projectName, state: formData.editData.state === '正常' ? 1 : 0 ?? 0, ...newData},{ showSuccessMessage: true }).catch(() => {
  171. formData.loading = false
  172. })
  173. }else {
  174. formData.loading = false
  175. return
  176. }
  177. if(res?.success){
  178. eventBus.emit('refreshView')
  179. formData.isShowDialog = false
  180. }
  181. formData.loading = false
  182. })
  183. }
  184. defineExpose({
  185. openDialog,
  186. })
  187. </script>
  188. <style scoped lang="scss">
  189. </style>