CreateView.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <template>
  2. <div>
  3. <ContentWrap>
  4. <el-form ref="formRef" v-loading="formLoading" :model="formData" label-width="100px">
  5. <el-form-item label="模式名称" prop="name">
  6. <el-input style="width: 300px" v-model="formData.modeName" placeholder="请输入模式名称" />
  7. </el-form-item>
  8. <el-form-item label="标题" prop="name">
  9. <el-input style="width: 300px" v-model="formData.modeTitle" placeholder="请输入标题" />
  10. </el-form-item>
  11. <el-form-item label="支持共锁" prop="isColockSupport">
  12. <el-checkbox v-model="formData.isColockSupport" :value="true" />
  13. </el-form-item>
  14. <el-form-item label="描述" prop="modeDescription">
  15. <el-input
  16. style="width: 550px"
  17. v-model="formData.modeDescription"
  18. type="textarea"
  19. :rows="4"
  20. placeholder="请输入描述内容"
  21. maxlength="500"
  22. show-word-limit
  23. />
  24. </el-form-item>
  25. <el-button type="primary" style="margin-left: 500px" @click="SaveWorkflowMode"
  26. >保 存
  27. </el-button>
  28. <el-button @click="goBack">取 消</el-button>
  29. </el-form>
  30. <el-form-item label="模式步骤" prop="step" style="margin-left: 30px" />
  31. <el-radio-group v-model="tabPosition" class="mb-15px" @change="handleTabChange">
  32. <el-radio-button label="first">表格视图</el-radio-button>
  33. <el-radio-button label="second">流程视图</el-radio-button>
  34. </el-radio-group>
  35. <ContentWrap>
  36. <TableView
  37. v-if="tabPosition == 'first'"
  38. :enableStepTable="enableStepTable"
  39. :modeId="formData.id"
  40. />
  41. <WorkflowView v-else :enableStepTable="enableStepTable" :modeId="formData.id" />
  42. </ContentWrap>
  43. </ContentWrap>
  44. </div>
  45. </template>
  46. <script setup lang="ts">
  47. import TableView from './TableView.vue'
  48. import WorkflowView from './WorkFlowView.vue'
  49. import * as ModeApi from '@/api/custonWorkflow/index'
  50. const { t } = useI18n() // 国际化
  51. const message = useMessage() // 消息弹窗
  52. const router = useRouter()
  53. const formLoading = ref(false) // 表单的加载中
  54. const tabPosition = ref('first')
  55. const enableStepTable = ref(false) //新增控制表格新增 模板导入 删除不能点击或者出现
  56. const formData = ref({
  57. modeName: undefined,
  58. modeTitle: undefined,
  59. isColockSupport: false,
  60. modeDescription: undefined,
  61. isPreset: undefined
  62. })
  63. // 监听数据变化,设置未保存标记
  64. const hasUnsavedChanges = ref(false) // 标记是否有未保存的更改
  65. // 方法定义
  66. const handleTabChange = (newTab: string) => {
  67. tabPosition.value = newTab
  68. }
  69. const SaveWorkflowMode = async () => {
  70. try {
  71. let data
  72. let successMessage
  73. if (formData.value.id) {
  74. // 有 id,调用修改接口
  75. data = await ModeApi.updateWorkflowMode(formData.value)
  76. successMessage = t('common.updateSuccess')
  77. } else {
  78. // 没有 id,调用新增接口
  79. data = await ModeApi.insertWorkflowMode(formData.value)
  80. successMessage = t('common.createSuccess')
  81. enableStepTable.value = true
  82. // 新增成功后,将返回的 id 保存到 formData 中
  83. if (data) {
  84. formData.value.id = data
  85. }
  86. }
  87. if (data) {
  88. message.success(successMessage)
  89. // 保存成功后重置未保存标记
  90. hasUnsavedChanges.value = false
  91. }
  92. } catch (error) {
  93. console.error('保存失败:', error)
  94. message.error('保存失败,请稍后重试')
  95. }
  96. }
  97. // 监听数据变化,设置未保存标记
  98. watch(
  99. () => ({
  100. modeName: formData.value.modeName,
  101. modeTitle: formData.value.modeTitle,
  102. isColockSupport: formData.value.isColockSupport,
  103. modeDescription: formData.value.modeDescription,
  104. isPreset: formData.value.isPreset
  105. }),
  106. () => {
  107. hasUnsavedChanges.value = true
  108. },
  109. { deep: true }
  110. )
  111. // 路由离开守卫
  112. onBeforeRouteLeave((to, from, next) => {
  113. if (hasUnsavedChanges.value) {
  114. ElMessageBox.confirm('当前页面有未保存的更改,是否继续离开?', '提示', {
  115. confirmButtonText: '继续离开',
  116. cancelButtonText: '取消',
  117. type: 'warning'
  118. })
  119. .then(() => {
  120. next()
  121. })
  122. .catch(() => {
  123. next(false)
  124. })
  125. } else {
  126. next()
  127. }
  128. })
  129. const goBack = () => {
  130. router.push('/CustomWorkflow/CW')
  131. }
  132. </script>
  133. <style scoped lang="scss"></style>