demand-modify-modal.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <script setup lang="ts">
  2. import { shallowRef, ref } from "vue";
  3. import { ElForm, ElMessage } from "element-plus";
  4. import BusinessQuery from "/@/components/BasicForm/src/fields/business-query.vue";
  5. import { onlyNumOnePoint } from "../../_utils";
  6. import apis from "../config/apis";
  7. import dayjs from "dayjs";
  8. import { unit2TenThousand2 } from "/@/utils/calc"
  9. defineProps<{ isBusiness?: boolean }>();
  10. const emit = defineEmits(["refresh"]);
  11. const visible = shallowRef(false);
  12. const loading = shallowRef(false);
  13. const type = ref('create')
  14. const createInitialData = () => ({
  15. date: '',
  16. companyNo: '',
  17. totalTip1: '',
  18. cost_tips: ''
  19. });
  20. const user_list = ref([])
  21. const formData = ref(createInitialData())
  22. const formRef = ref<InstanceType<typeof ElForm> | null>(null)
  23. const rules = {
  24. date: [{ required: true, message: "请选择数据时间", trigger: "change" }],
  25. companyNo: [{ required: true, message: "请选择业务公司", trigger: "change" }],
  26. totalTip1: [{ required: true, message: "请输入营收目标", trigger: "change" }],
  27. cost_tips: [{ required: true, message: "请输入毛利目标", trigger: "change" }]
  28. };
  29. function onInput(value, prop) {
  30. if (Number(value) >= 100000000) {
  31. formData.value[prop] = 99999999.99
  32. } else {
  33. formData.value[prop] = onlyNumOnePoint(value)
  34. }
  35. }
  36. async function onSubmit() {
  37. try {
  38. await formRef.value?.validate()
  39. const { companyNo, date, totalTip1, cost_tips, id } = formData.value
  40. if (Number(cost_tips) > Number(totalTip1)) {
  41. ElMessage.warning("毛利目标不能功大于应收目标")
  42. return
  43. }
  44. loading.value = true
  45. const [year, month] = date.split('-')
  46. const parameter = {
  47. id,
  48. inv_tips: totalTip1,
  49. cost_tips: cost_tips,
  50. uid: companyNo,
  51. month,
  52. year
  53. }
  54. const isUpdate = type.value === 'update'
  55. if (!isUpdate) delete parameter['id']
  56. const api = isUpdate ? apis.update : apis.create
  57. const result = await api(parameter)
  58. if (result.code == 0 || result.code == 1) {
  59. ElMessage.success((isUpdate ? '修改' : '添加') + '成功')
  60. visible.value = false
  61. emit('refresh')
  62. } else {
  63. ElMessage.warning(result.message)
  64. }
  65. console.log(111)
  66. loading.value = false
  67. } catch (err) {
  68. console.log(err)
  69. }
  70. }
  71. function disabledDate(time) {
  72. const current = dayjs(new Date()).format('YYYY')
  73. const target = dayjs(time).format('YYYY')
  74. const minDate = new Date(2023, 0, 1);
  75. return target - current >= 2 || time.getTime() < minDate.getTime();
  76. }
  77. async function requestData() {
  78. loading.value = true
  79. const data = await apis.user_list({ level: '2', size: 1000, page: 1 })
  80. loading.value = false
  81. if (data.code === 1) { user_list.value = data.data.list }
  82. }
  83. defineExpose({
  84. onDisplay: async (row) => {
  85. visible.value = true;
  86. await requestData()
  87. if (row.id) {
  88. type.value = 'update'
  89. const { id, year, month, cost_tips, inv_tips, uid } = row
  90. formData.value = {
  91. id,
  92. companyNo: uid,
  93. date: `${year}-${String(month).length === 1 ? '0' + month : month}`,
  94. totalTip1: inv_tips,
  95. cost_tips: cost_tips
  96. }
  97. // setTimeout(() => formData.value.companyNo = row.companyNo, 500);
  98. } else {
  99. type.value = 'create'
  100. formData.value = { date: '', companyNo: row.uid, totalTip1: '', cost_tips: '0' }
  101. // setTimeout(() => formData.value.companyNo = row.companyNo, 500);
  102. }
  103. }
  104. });
  105. </script>
  106. <template>
  107. <el-dialog v-model="visible" :title="(type === 'update' ? '修改' : '添加') + '业务经理指标'" center
  108. @close="() => formData = createInitialData()" :close-on-click-modal="false" :close-on-press-escape="false">
  109. <el-form label-width="90px" :rules="rules" :model="formData" ref="formRef">
  110. <ElFormItem label="指标月份" prop="date">
  111. <ElDatePicker v-model="formData.date" type="month" style="width: 100%" placeholder="指标月份" value-format="YYYY-MM"
  112. :disabled="type === 'update'" :disabledDate="disabledDate" />
  113. </ElFormItem>
  114. <ElFormItem label="业务经理" prop="companyNo">
  115. <ElSelect style="width: 100%" v-model="formData.companyNo" placeholder="业务经理" filterable>
  116. <ElOption v-for="item in user_list" :label="item.nickname" :value="item.id" :disabled="item.status == '0'"
  117. :key="item.id + '11'" />
  118. </ElSelect>
  119. </ElFormItem>
  120. <ElFormItem label="开票指标" prop="totalTip1">
  121. <ElInput placeholder="开票指标" v-model="formData.totalTip1" @input="value => onInput(value, 'totalTip1')">
  122. <template #append>{{ unit2TenThousand2(formData.totalTip1) }}</template>
  123. </ElInput>
  124. </ElFormItem>
  125. <ElFormItem label="毛利指标" prop="cost_tips">
  126. <ElInput placeholder="利润指标" v-model="formData.cost_tips" @input="value => onInput(value, 'cost_tips')">
  127. <template #append>{{ unit2TenThousand2(formData.cost_tips) }}</template>
  128. </ElInput>
  129. </ElFormItem>
  130. <ElFormItem>
  131. <div class="w-full flex justify-end">
  132. <ElButton class="float-right" :loading="loading" @click="onSubmit" type="primary">
  133. 保存
  134. </ElButton>
  135. </div>
  136. </ElFormItem>
  137. </el-form>
  138. </el-dialog>
  139. </template>