StandardSaveAs.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <template>
  2. <tf-dialog
  3. class="standard-save-as"
  4. v-bind="$attrs"
  5. v-on="listeners"
  6. @submit="onSubmit"
  7. :loading="loading"
  8. :disabled="loading"
  9. title="另存为指标标准"
  10. >
  11. <el-form label-width="auto" size="small" class="form" ref="form" :model="formData" :rules="rules">
  12. <el-form-item label="指标标准名称" prop="standardName">
  13. <el-input v-model="formData.standardName" placeholder="请输入指标标准名称" />
  14. </el-form-item>
  15. </el-form>
  16. </tf-dialog>
  17. </template>
  18. <script lang="ts">
  19. import { ElForm } from 'element-ui/types/form'
  20. import { Vue, Component, Prop, Watch } from 'vue-property-decorator'
  21. import { IStandard, IStandardParam } from '../../api/common'
  22. import { addStandard, addStandardParam, getStandard, standardPage } from '../../api/standard'
  23. @Component({ name: 'StandardSaveAs' })
  24. export default class StandardSaveAs extends Vue {
  25. @Prop({ type: Object, default: () => ({}) }) standard!: IStandard
  26. @Prop({ type: Array, default: () => [] }) params!: IStandardParam[]
  27. @Prop({ type: Number }) typeId!: number
  28. $refs!: { form: ElForm }
  29. formData: Partial<IStandard> = { standardName: '' }
  30. rules: ElForm['rules'] = { standardName: [{ required: true, message: '请输入指标标准名称', trigger: 'change' }] }
  31. loading: boolean = false
  32. get listeners() {
  33. const { submit, ...rest } = this.$listeners
  34. return rest
  35. }
  36. onSubmit() {
  37. this.$refs.form.validate(async (valid) => {
  38. if (valid) {
  39. const { id: oldId, standardName: oldName, ...rest } = this.standard
  40. const saveStandard = async () => {
  41. try {
  42. await addStandard({
  43. standardName: this.formData.standardName,
  44. typeId: this.typeId,
  45. ...this.$store.getters['project/info'],
  46. ...rest
  47. })
  48. return true
  49. } catch (error) {
  50. console.log(error)
  51. }
  52. return false
  53. }
  54. const getStandardId = async () => {
  55. try {
  56. const {
  57. result: { records }
  58. } = await standardPage({ current: 1, size: 1, standardName: this.formData.standardName })
  59. const { id: standardId } = records[0] || {}
  60. return standardId
  61. } catch (error) {
  62. console.log(error)
  63. }
  64. return null
  65. }
  66. const saveParams = async (standardId: number) => {
  67. try {
  68. const results = await Promise.all(
  69. this.params.map(({ id, ...rest }) => {
  70. return addStandardParam({ standardId, ...rest })
  71. })
  72. )
  73. !results.some((item) => !item) && this.$message.success('指标标准另存成功')
  74. } catch (error) {
  75. console.log(error)
  76. }
  77. }
  78. this.loading = true
  79. const standardSaved = await saveStandard()
  80. const standardId = standardSaved && (await getStandardId())
  81. if (standardId && this.params.length > 0) {
  82. await saveParams(standardId)
  83. }
  84. this.loading = false
  85. }
  86. })
  87. }
  88. @Watch('standard', { immediate: true })
  89. onStandardChange(standard: IStandard) {
  90. const { standardName } = standard || {}
  91. this.formData.standardName = standardName ? `${standardName} - 复制` : ''
  92. }
  93. }
  94. </script>
  95. <style lang="scss"></style>