CustomReport.vue 6.1 KB

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