log.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <template>
  2. <div class="all-box">
  3. <div class="all" style="padding: 40px;">
  4. <div style="margin-bottom: 30px;">
  5. <div class="initia_title">工作日志积分</div>
  6. <div class="initia_title_1">日志的相关说明</div>
  7. </div>
  8. <el-table ref="multipleTable" :data="list" tooltip-effect="dark" align="center" v-loading="loading">
  9. <el-table-column label="序号" align="left" type="index"></el-table-column>
  10. <el-table-column label="日志名称" prop="name"></el-table-column>
  11. <el-table-column label="日志积分规则">
  12. <template slot-scope="scope">
  13. <span>{{ getMoney(scope.row.interval) }}{{ scope.row.config.upper_limit }}汇报,每次奖{{ scope.row.config.point }} B分</span>
  14. </template>
  15. </el-table-column>
  16. <el-table-column label="状态">
  17. <template slot-scope="scope">
  18. <span v-if="scope.row.enable == 0" class="yellow">已禁用</span>
  19. <span v-else class="green">已启用</span>
  20. </template>
  21. </el-table-column>
  22. <el-table-column label="">
  23. <template slot-scope="scope">
  24. <div @click.stop="openSet(scope.row)"><span class="lookQrcode">设置</span></div>
  25. </template>
  26. </el-table-column>
  27. <template slot="empty">
  28. <noData></noData>
  29. </template>
  30. </el-table>
  31. </div>
  32. <el-dialog title="设置" :visible.sync="dialogVisible" top="25vh" width="520px">
  33. <el-form label-width="110px" :model="selectItem" ref="setForm">
  34. <el-form-item label="是否启用"><el-switch v-model="selectItem.enable" active-color="#13ce66" inactive-color="rgb(202 202 202)"></el-switch></el-form-item>
  35. <el-form-item label="日志名称" prop="name" :rules="[{ required: true, message: '请输入日志名称'}]">
  36. <el-popover placement="top-start" title="温馨提示" width="200" trigger="hover" content="日志名称必须与钉钉预设模板名称一致,否则可能会无法同步钉钉的日志记录">
  37. <el-input style="width: 200px;" v-model="selectItem.name" slot="reference"></el-input>
  38. </el-popover>
  39. </el-form-item>
  40. <!-- <div style="margin-left: 110px;" class="yellow">*日志名称必须与钉钉预设模板名称一致</div> -->
  41. <div class="title">日志汇报要求</div>
  42. <el-form-item label="日志汇报要求" prop="interval" :rules="[{ required: true, message: '请选择汇报要求'}]">
  43. <el-select class="widthInput" v-model="selectItem.interval" placeholder="请选择">
  44. <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
  45. </el-select>
  46. </el-form-item>
  47. <el-form-item label="每次汇报奖" :rules="[{ required: true, message: '请输入分值', trigger: 'change' }]" prop="config.point">
  48. <el-input class="widthInput" oninput="value=value.replace(/[^\d]/g,'')" v-model.number="selectItem.config.point"></el-input><span style="margin-left: 5px;">B分</span>
  49. </el-form-item>
  50. <el-form-item label="汇报提交超过" prop="config.upper_limit" :rules="[{ required: true, message: '请输入次数'}]" >
  51. <el-input class="widthInput" oninput="value=value.replace(/[^\d]/g,'')" v-model.number="selectItem.config.upper_limit"></el-input><span style="margin-left: 5px;">次,不再奖励积分</span>
  52. </el-form-item>
  53. <el-form-item style="text-align: right; margin-bottom: 0">
  54. <el-button @click="dialogVisible = false">取消</el-button>
  55. <el-button type="primary" :loading="setLoading" :disabled="setLoading" @click="submit('setForm')">确定</el-button>
  56. </el-form-item>
  57. </el-form>
  58. </el-dialog>
  59. </div>
  60. </template>
  61. <script>
  62. import noData from '@/components/noData';
  63. export default {
  64. components: { noData },
  65. data() {
  66. return {
  67. loading: false,
  68. setLoading: false,
  69. ding_enable: true,
  70. list: [],
  71. dialogVisible: false,
  72. selectItem:{
  73. config: {point: "", upper_limit: ""},
  74. enable: '',
  75. id: '',
  76. interval: '',
  77. name: "",
  78. site_id: '',
  79. type: "",
  80. },
  81. options: [{
  82. value: 1,
  83. label: '每日'
  84. }, {
  85. value: 2,
  86. label: '每周'
  87. }, {
  88. value: 3,
  89. label: '每月'
  90. }],
  91. };
  92. },
  93. mounted() {
  94. this.getList();
  95. },
  96. methods: {
  97. submit(fromName) {
  98. this.$refs[fromName].validate(valid => {
  99. if (valid) {
  100. this.setLoading = true;
  101. let jsonItem=JSON.stringify(this.selectItem)
  102. let data=JSON.parse(jsonItem);
  103. data.enable=data.enable? 1:0;
  104. data.point=data.config.point;
  105. data.upper_limit=data.config.upper_limit;
  106. this.$axios('post', '/api/integral/report/templates', data).then(res => {
  107. if (res.data.code == 1) {
  108. this.$message.success(res.data.msg);
  109. this.getList();
  110. this.dialogVisible = false;
  111. }
  112. }).finally(() => {
  113. this.setLoading = false;
  114. });
  115. }
  116. });
  117. },
  118. openSet(item) {
  119. var jsonItem=JSON.stringify(item)
  120. this.selectItem=JSON.parse(jsonItem);
  121. this.selectItem.enable=this.selectItem.enable==0? false:true
  122. this.dialogVisible=true;
  123. },
  124. getMoney: function(index) {
  125. var str; //1-每日 2-每周 3-每月
  126. switch (index) {
  127. case 1:
  128. str = '每日';
  129. break;
  130. case 2:
  131. str = '每周';
  132. break;
  133. case 3:
  134. str = '每月';
  135. break;
  136. }
  137. return str;
  138. },
  139. getList() {
  140. this.loading = true;
  141. this.$axios('get', '/api/integral/report/templates/list')
  142. .then(res => {
  143. this.list = res.data.data.list;
  144. })
  145. .finally(err => {
  146. this.loading = false;
  147. });
  148. }
  149. }
  150. };
  151. </script>
  152. <style scoped lang="scss">
  153. .widthInput{
  154. width: 120px;
  155. }
  156. .title {
  157. margin: 10px 0;
  158. margin-top: 0;
  159. font-size: 16px;
  160. font-weight: 700;
  161. }
  162. .initia_title {
  163. font-size: 20px;
  164. color: rgba(48, 49, 51, 1);
  165. font-family: PingFangSC-Regular;
  166. }
  167. .initia_title_1 {
  168. color: #606266;
  169. font-size: 14px;
  170. margin-top: 10px;
  171. }
  172. .lookQrcode {
  173. color: #606266;
  174. cursor: pointer;
  175. transition: all 0.3s;
  176. font-weight: 700;
  177. }
  178. .lookQrcode:hover {
  179. color: #2490fd;
  180. }
  181. </style>