CustomReport.vue 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <template>
  2. <div class="reportCard" v-for="(item, index) in prop.form.customPushConfigList">
  3. <a v-if="!disableType.contentDisable">
  4. <el-icon class="cardIcon"
  5. color="rgb(216,216,216)"
  6. v-if="prop.form.customPushConfigList.length != 1"
  7. @click="deleteReportCard(index)"
  8. >
  9. <CircleCloseFilled />
  10. </el-icon>
  11. </a>
  12. <el-form-item label="统计区间:" required>
  13. <el-form-item
  14. :prop="`customPushConfigList[` + index + `].customStartTime`"
  15. :rules="[{ required: true, message: '请选择推统计区间', trigger: 'change'}]"
  16. >
  17. <el-col :span="22">
  18. <el-date-picker
  19. v-model="item.daterange"
  20. type="daterange"
  21. range-separator="至"
  22. start-placeholder="开始日期"
  23. end-placeholder="结束日期"
  24. size="default"
  25. value-format="YYYY-MM-DD"
  26. :disabled="disableType.contentDisable"
  27. />
  28. </el-col>
  29. </el-form-item>
  30. </el-form-item>
  31. <el-form-item label="推送时间:" required>
  32. <el-form-item
  33. :prop="`customPushConfigList[` + index + `].pushDay`"
  34. :rules="{ required: true, message: '请选择推送日期', trigger: 'change' }"
  35. >
  36. <el-col :span="22">
  37. <el-date-picker
  38. v-model="item.pushDay"
  39. type="date"
  40. placeholder="选择日期"
  41. size="default"
  42. style="width: 146.5px; height: 32px;"
  43. value-format="YYYY-MM-DD"
  44. :disabled="disableType.contentDisable"
  45. />
  46. </el-col>
  47. </el-form-item>
  48. <el-col class="text-center" :span="2">
  49. <span class="text-gray-500">—</span>
  50. </el-col>
  51. <el-form-item
  52. :prop="`customPushConfigList[` + index + `].pushTime`"
  53. :rules="{ required: true, message: '请选择推送时间', trigger: 'change' }"
  54. >
  55. <el-col :span="22">
  56. <el-time-picker
  57. v-model="item.pushTime"
  58. placeholder="09:00"
  59. value-format="HH:mm:ss"
  60. style="width: 146.5px; height: 32px;"
  61. :disabled="disableType.contentDisable"
  62. />
  63. </el-col>
  64. </el-form-item>
  65. </el-form-item>
  66. <el-form-item label="推送对象:" required
  67. :prop="`customPushConfigList[` + index + `].recipientType`"
  68. :rules="{ required: true, message: '请选择推送对象', trigger: 'change' }"
  69. >
  70. <el-radio-group
  71. v-model="item.recipientType"
  72. :disabled="disableType.contentDisable"
  73. >
  74. <el-radio value="1">全员</el-radio>
  75. <el-radio value="2">分组</el-radio>
  76. <el-radio value="3">自定义</el-radio>
  77. </el-radio-group>
  78. </el-form-item>
  79. <el-form-item
  80. v-if="item.recipientType === '2'"
  81. label="选择分组:"
  82. required
  83. :prop="`customPushConfigList[` + index + `].userGroupList`"
  84. :rules="{ required: true, message: '请选择分组', trigger: 'change' }"
  85. >
  86. <el-col :span="10">
  87. <el-select
  88. v-model="item.userGroupList"
  89. multiple
  90. placeholder="请选择分组"
  91. style="width: 240px"
  92. :disabled="disableType.contentDisable"
  93. >
  94. <el-option
  95. v-for="item in options"
  96. :key="item.userGroupId"
  97. :label="item.name"
  98. :value="item.userGroupId"
  99. />
  100. </el-select>
  101. </el-col>
  102. </el-form-item>
  103. <el-form-item
  104. v-if="item.recipientType === '3'"
  105. label="选择人员:"
  106. required
  107. :prop="`customPushConfigList[` + index + `].customUserList`"
  108. :rules="{ required: true, message: '请选择推送人员', trigger: 'change' }"
  109. >
  110. <el-col :span="18">
  111. <CustomSelectTree :form="form" :disableType="disableType" :index="index" :statisticType="5"/>
  112. </el-col>
  113. </el-form-item>
  114. </div>
  115. <el-button type="primary" @click="addCustom" class="addButton" :disabled="disableType.contentDisable">新建自定义</el-button>
  116. </template>
  117. <script lang="ts" setup>
  118. import { ref, reactive, onMounted } from 'vue';
  119. import { computeCustom, createCustomReport } from './class.ts';
  120. import {CircleCloseFilled} from '@element-plus/icons-vue'
  121. import { searchGroup } from '@/api/sendMessage/sendMessage';
  122. import CustomSelectTree from '../CustomSelectTree.vue';
  123. const prop = defineProps(['form', 'disableType'])
  124. const emit = defineEmits(['customPropsChange']);
  125. if (prop.form.customPushConfigList.length === 0){
  126. prop.form.customPushConfigList = reactive<computeCustom[]>([])
  127. const defaultReport = createCustomReport()
  128. prop.form.customPushConfigList.push(defaultReport)
  129. }
  130. const options = ref()
  131. const addCustom = () => {
  132. prop.form.customPushConfigList.push(createCustomReport())
  133. };
  134. const deleteReportCard = (index) => {
  135. prop.form.customPushConfigList.splice(index, 1);
  136. };
  137. onMounted(()=>{
  138. searchGroup().then(res => {
  139. options.value = res.groupVOList
  140. }).catch(error => {});
  141. })
  142. </script>
  143. <style scoped>
  144. .reportCard{
  145. margin-left: 87px;
  146. background-color: #FAFAFA;
  147. padding-top: 12px;
  148. width: 530px;
  149. position: relative;
  150. }
  151. .addButton{
  152. margin-top: 16px;
  153. margin-bottom: 32px;
  154. margin-left: 87px;
  155. width: 124px;
  156. height: 32px;
  157. background: #FFFFFF;
  158. border-radius: 4px;
  159. border: 1px dashed #1790FF;
  160. color: #1890FF;
  161. }
  162. .cardIcon{
  163. position: absolute;
  164. right: 0px;
  165. top: 0px;
  166. width: 14px;
  167. height: 14px;
  168. }
  169. </style>