dateMoveWaySection.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <template>
  2. <div class="date-change-ways">
  3. <div class="header date-item">
  4. <label class="el-form-item__label">{{$t('ETableChildren.date_change_label')}}</label>
  5. <el-select v-model="dateChangeSelect" :placeholder="$t('ETable.Msg.please_select')" style="width:110px">
  6. <el-option :label="$t('ETableChildren.date_displacement_label')" :value="1"/>
  7. <el-option :label="$t('ETableChildren.specified_frequency_tag')" :value="2"/>
  8. </el-select>
  9. <el-button type="text" style="margin: 0 10px;" @click="addDateChange">{{$t('ETable.Btn.add_btn')}}</el-button>
  10. </div>
  11. <ul v-if="dateChangeArr.length" class="date-change-list">
  12. <li v-for="(dateItem,index) in dateChangeArr" :key="dateItem.ChangeType" class="date-change-li">
  13. <div v-if="dateItem.ChangeType===1" class="date-item">
  14. <el-tag type="info" style="margin-right:15px">{{$t('ETableChildren.date_displacement_label')}}</el-tag>
  15. <div>
  16. <el-input
  17. v-model="dateItem.Day"
  18. type="number"
  19. style="margin-right:10px;width:80px"
  20. @change="e => {dateItem.Day=Number(e);}"
  21. />{{$t('ETable.Date.day')}}
  22. <el-input
  23. v-model="dateItem.Month"
  24. type="number"
  25. style="margin-right:10px;width:80px"
  26. @change="e => {dateItem.Month=Number(e);}"
  27. />{{$t('ETable.Date.month')}}
  28. <el-input
  29. v-model="dateItem.Year"
  30. type="number"
  31. style="margin-right:10px;width:80px"
  32. @change="e => {dateItem.Year=Number(e);}"
  33. />{{$t('ETable.Date.year')}}
  34. </div>
  35. <i class="el-icon-delete" @click="removeDateItem(index)"></i>
  36. </div>
  37. <div v-else-if="dateItem.ChangeType===2" class="date-item">
  38. <el-tag type="info" style="margin-right:15px">{{$t('ETableChildren.specified_frequency_tag')}}</el-tag>
  39. <el-select
  40. style="max-width: 120px;"
  41. v-model="dateItem.Frequency"
  42. :placeholder="$t('OnlineExcelPage.please_select_frequency')"
  43. @change="dateItem.FrequencyDay=frequencyDaysOptions[0].name;"
  44. >
  45. <el-option
  46. v-for="item in frequencyOptions"
  47. :key="item.value"
  48. :label="item.name"
  49. :value="item.value"
  50. />
  51. </el-select>
  52. <el-select
  53. style="max-width: 120px;margin:0 10px"
  54. v-model="dateItem.FrequencyDay"
  55. :placeholder="$t('ETable.Msg.please_select')"
  56. >
  57. <el-option
  58. v-for="item in frequencyDaysOptions"
  59. :key="item.name"
  60. :label="item.lable"
  61. :value="item.name"
  62. />
  63. </el-select>
  64. <i class="el-icon-delete" @click="removeDateItem(index)"></i>
  65. </div>
  66. </li>
  67. </ul>
  68. </div>
  69. </template>
  70. <script>
  71. export default {
  72. props:{
  73. defaultArr:{
  74. default:()=>[]
  75. }
  76. },
  77. computed: {
  78. frequencyDaysOptions() {
  79. let typeMap = {
  80. '本周': [
  81. { name: '周一' ,lable: this.$t('ETable.Date.monday') },
  82. { name: '周二' ,lable: this.$t('ETable.Date.tuesday')},
  83. { name: '周三' ,lable: this.$t('ETable.Date.wednesday')},
  84. { name: '周四' ,lable: this.$t('ETable.Date.thursday')},
  85. { name: '周五' ,lable: this.$t('ETable.Date.friday')},
  86. { name: '周六' ,lable: this.$t('ETable.Date.saturday')},
  87. { name: '周日' ,lable: this.$t('ETable.Date.sunday')},
  88. ]
  89. }
  90. let obj = this.dateChangeArr.find(_ => _.ChangeType===2);
  91. if(!obj) return []
  92. return typeMap[obj.Frequency]
  93. ? typeMap[obj.Frequency]
  94. : [
  95. {name:'第一天',lable: this.$t('ETable.Date.first_day')},
  96. {name:'最后一天',lable: this.$t('ETable.Date.last_day')}
  97. ]
  98. },
  99. frequencyOptions(){
  100. return [
  101. { name: this.$t('ETable.Date.this_week'), value: '本周' },
  102. { name: this.$t('ETable.Date.this_ten_days'), value: '本旬' },
  103. { name: this.$t('ETable.Date.this_month'), value: '本月' },
  104. { name: this.$t('ETable.Date.this_season'), value: '本季' },
  105. { name: this.$t('ETable.Date.this_half_year'), value: '本半年' },
  106. { name: this.$t('ETable.Date.this_year'), value: '本年' },
  107. ]
  108. }
  109. },
  110. data() {
  111. return {
  112. dateChangeSelect: 1,
  113. dateChangeArr: [],
  114. }
  115. },
  116. created() {
  117. console.log('日期变换组件加载',this.defaultArr);
  118. this.initData(this.defaultArr)
  119. },
  120. methods:{
  121. /* 提加日期变换数组 */
  122. addDateChange() {
  123. let haveObj = this.dateChangeArr.find(_ => _.ChangeType===this.dateChangeSelect);
  124. if(haveObj) return this.$message.warning(this.dateChangeSelect===1?this.$t('ETableChildren.added_date_offset_msg') :this.$t('ETableChildren.added_frequency_offset_msg') )
  125. let item = {
  126. ChangeType: this.dateChangeSelect,
  127. Day: 0,
  128. Month: 0,
  129. Year: 0,
  130. Frequency: '本周',
  131. FrequencyDay: '周一'
  132. }
  133. this.dateChangeArr.push(item)
  134. },
  135. /* 参数更新时刷数据 */
  136. changeParams() {
  137. this.$emit('updateData')
  138. },
  139. initData(data=null) {
  140. if(data) {
  141. this.dateChangeArr = data || [];
  142. }else {
  143. this.dateChangeSelect = 1;
  144. this.dateChangeArr = []
  145. }
  146. },
  147. removeDateItem(index) {
  148. this.dateChangeArr.splice(index,1)
  149. }
  150. },
  151. }
  152. </script>
  153. <style scoped lang='scss'>
  154. .date-change-ways {
  155. padding-left: 20px;
  156. .date-change-list {
  157. padding-left: 68px;
  158. }
  159. .date-change-li {
  160. margin: 10px 0;
  161. }
  162. .header {
  163. label { width: 100px;text-align: right;margin-left: -20px;}
  164. }
  165. .date-item {
  166. display: flex;
  167. align-items: center;
  168. .el-icon-delete {
  169. color: #f00;
  170. font-size: 16px;
  171. margin:0 10px;
  172. cursor: pointer;
  173. }
  174. }
  175. }
  176. </style>