my_issue.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688
  1. <template>
  2. <div>
  3. <div class="box">
  4. <el-tabs v-model="status"><el-tab-pane :disabled="loading" v-for="(item, index) in tabsOption" :key="index" :label="item.label" :name="item.name"></el-tab-pane></el-tabs>
  5. <el-form ref="formData" :inline="true" :model="formData" label-width="70px">
  6. <el-form-item>
  7. <el-dropdown @command="downClick">
  8. <el-button type="primary">
  9. 发布任务
  10. <i class="el-icon-arrow-down el-icon--right"></i>
  11. </el-button>
  12. <el-dropdown-menu slot="dropdown">
  13. <el-dropdown-item command="1">+ 临时任务</el-dropdown-item>
  14. <el-dropdown-item command="2">+ 悬赏任务</el-dropdown-item>
  15. </el-dropdown-menu>
  16. </el-dropdown>
  17. </el-form-item>
  18. <el-form-item v-if="status == 'assign' || status == 'reward'" label="积分类型">
  19. <el-select v-model="formData.pt_id" placeholder="请选择">
  20. <el-option v-for="item in point_types" :key="item.id" :label="item.name" :value="item.id"></el-option>
  21. </el-select>
  22. </el-form-item>
  23. <el-form-item v-if="status == 'assign'" label="任务状态">
  24. <el-select v-model="formData.status" placeholder="请选择">
  25. <el-option v-for="item in task_status" :key="item.id" :label="item.name" :value="item.code"></el-option>
  26. </el-select>
  27. </el-form-item>
  28. <el-form-item v-if="status == 'assign'" label="排序" label-width="50px">
  29. <el-select v-model="formData.sort" placeholder="请选择排序">
  30. <el-option v-for="item in sort" :key="item.id" :label="item.name" :value="item.code"></el-option>
  31. </el-select>
  32. </el-form-item>
  33. <el-form-item v-if="status == 'reward'" label="排序" label-width="50px">
  34. <el-select v-model="formData.order_by" placeholder="请选择排序">
  35. <el-option v-for="item in order_by" :key="item.id" :label="item.name" :value="item.code"></el-option>
  36. </el-select>
  37. </el-form-item>
  38. <el-form-item label-width="60px">
  39. <el-input v-model="formData.content" placeholder="请输入任务内容" max="200" @keyup.enter.native="getContent()" class="persons_name">
  40. <el-button slot="append" icon="el-icon-search" @click="getContent()"></el-button>
  41. </el-input>
  42. </el-form-item>
  43. <el-form-item v-if="status == 'assign' || status == 'repetitive'" label="执行人" label-width="60px">
  44. <el-select v-model="formData.executor_id" clearable filterable placeholder="请输入或选择执行人">
  45. <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
  46. </el-select>
  47. </el-form-item>
  48. <el-form-item label="审批人" label-width="60px">
  49. <el-select v-model="formData.reviewer_id" clearable filterable placeholder="请输入或选择审批人">
  50. <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
  51. </el-select>
  52. </el-form-item>
  53. </el-form>
  54. <div v-show="status == 'assign'">
  55. <el-table :data="list" style="width: 100%" v-loading="loading" @row-click="rowClick">
  56. <el-table-column label="执行人" prop="task_name" width="250px">
  57. <template slot-scope="scope">
  58. <div style="display:flex">
  59. <userImage
  60. :img_url="scope.row.employee_img_url"
  61. :id="scope.row.employee_id"
  62. :user_name="scope.row.employee_name"
  63. width="50px"
  64. height="50px"
  65. ></userImage>
  66. <span style="line-height: 50px; padding-left: 10px;">{{ scope.row.employee_name }}的{{ scope.row.pt_name }}任务</span>
  67. </div>
  68. </template>
  69. </el-table-column>
  70. <el-table-column label="任务内容" prop="task_name">
  71. <template slot-scope="scope">
  72. <span class="font-flex-word" style="max-width: 200px;">{{ scope.row.task_name }}</span>
  73. </template>
  74. </el-table-column>
  75. <el-table-column label="积分" prop="base_point" width="100px">
  76. <template slot-scope="scope">
  77. <span v-if="scope.row.point_config && scope.row.point_config.review_point > 0" class="red">
  78. +{{ scope.row.point_config.review_point }} {{ scope.row.pt_name }}
  79. </span>
  80. <span v-else>
  81. <span v-if="scope.row.point_config && scope.row.point_config.base_point">
  82. <span class="red" v-if="scope.row.point_config.base_point > 0">+{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}</span>
  83. <span class="color_green" v-else>{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}</span>
  84. </span>
  85. </span>
  86. </template>
  87. </el-table-column>
  88. <el-table-column label="截止时间" prop="expire_time">
  89. <template slot-scope="scope">
  90. <span>{{ scope.row.expire_time }}</span>
  91. </template>
  92. </el-table-column>
  93. <el-table-column label="审批人" width="100px" prop="reviewer_name"></el-table-column>
  94. <el-table-column label="状态" prop="owner_id" width="100px">
  95. <template slot-scope="scope">
  96. <span class="orange" v-if="scope.row.status == 1">进行中</span>
  97. <span class="green" v-else-if="scope.row.status == 2">已完成</span>
  98. <span class="red" v-else-if="scope.row.status == 3">退回</span>
  99. <span class="green" v-else-if="scope.row.status == 4">已审批</span>
  100. <span class="textBox" v-else>已撤回</span>
  101. </template>
  102. </el-table-column>
  103. <el-table-column label="操作" align="center" width="80px">
  104. <template slot-scope="scope">
  105. <el-dropdown placement="bottom" :show-timeout="150" :hide-timeout="150">
  106. <span class="el-dropdown-links">···</span>
  107. <el-dropdown-menu slot="dropdown">
  108. <el-dropdown-item :disabled="false" v-if="scope.row.status == 1">
  109. <el-button type="text" class="color-blue" v-loading.fullscreen.lock="bodyLoad" @click.stop="issueAmend1(scope.row)">修改</el-button>
  110. </el-dropdown-item>
  111. <el-dropdown-item :disabled="false">
  112. <el-button type="text" class="color-red" v-loading.fullscreen.lock="bodyLoad" @click.stop="deletes(scope.row, 0)">删除</el-button>
  113. </el-dropdown-item>
  114. </el-dropdown-menu>
  115. </el-dropdown>
  116. </template>
  117. </el-table-column>
  118. <template slot="empty">
  119. <noData></noData>
  120. </template>
  121. </el-table>
  122. </div>
  123. <div v-show="status == 'reward'">
  124. <el-table :data="list" style="width: 100%" v-loading="loading" @row-click="rewardTasksClick">
  125. <el-table-column label="发布人" prop="employee_id">
  126. <template slot-scope="scope">
  127. <div style="display:flex">
  128. <userImage width="50px" height="50px" :img_url="scope.row.owner_img_url" :user_name="scope.row.owner_name"></userImage>
  129. <span style="line-height: 50px; padding-left: 10px;">我发布的{{ scope.row.pt_name }}任务</span>
  130. </div>
  131. </template>
  132. </el-table-column>
  133. <el-table-column label="任务内容" prop="task_name">
  134. <template slot-scope="scope">
  135. <span class="font-flex-word" style="max-width: 200px;">{{ scope.row.task_name }}</span>
  136. </template>
  137. </el-table-column>
  138. <el-table-column label="积分" prop="base_point" width="100px">
  139. <template slot-scope="scope">
  140. <span v-if="scope.row.base_point > 0" class="red">+{{ scope.row.base_point }} {{ scope.row.pt_name }}</span>
  141. <span v-else class="color_green">{{ scope.row.base_point }} {{ scope.row.pt_name }}</span>
  142. </template>
  143. </el-table-column>
  144. <el-table-column label="截止时间" prop="expire_time">
  145. <template slot-scope="scope">
  146. <span>{{ scope.row.expire_time }}</span>
  147. </template>
  148. </el-table-column>
  149. <el-table-column label="审批人" width="100px" prop="reviewer_name">
  150. <template slot-scope="scope">
  151. <span v-if="scope.row.reviewer_id">{{ list_approver(scope.row.reviewer_id) }}</span>
  152. </template>
  153. </el-table-column>
  154. <el-table-column label="状态" prop="owner_id" width="100px">
  155. <template slot-scope="scope">
  156. <span class="orange" v-if="scope.row.status == 1">待领取</span>
  157. <span class="orange" v-else-if="scope.row.status == 2">进行中</span>
  158. <span class="green" v-else-if="scope.row.status == 3">已完成</span>
  159. <span class="fontColorZ" v-else-if="scope.row.status == 4">已撤回</span>
  160. <span class="red" v-else>已过期</span>
  161. </template>
  162. </el-table-column>
  163. <el-table-column prop="base_point" label="操作" align="center" width="80px">
  164. <template slot-scope="scope">
  165. <el-dropdown placement="bottom" :show-timeout="150" :hide-timeout="150">
  166. <span class="el-dropdown-links">···</span>
  167. <el-dropdown-menu slot="dropdown">
  168. <el-dropdown-item :disabled="false" v-if="scope.row.status == 1">
  169. <el-button type="text" class="color-blue" v-loading.fullscreen.lock="bodyLoad" @click.stop="offerARewardAmend2(scope.row)">修改</el-button>
  170. </el-dropdown-item>
  171. <el-dropdown-item :disabled="false">
  172. <el-button type="text" class="color-red" v-loading.fullscreen.lock="bodyLoad" @click.stop="deletes(scope.row, 1)">删除</el-button>
  173. </el-dropdown-item>
  174. </el-dropdown-menu>
  175. </el-dropdown>
  176. </template>
  177. </el-table-column>
  178. <template slot="empty">
  179. <noData></noData>
  180. </template>
  181. </el-table>
  182. </div>
  183. <div v-if="status == 'repetitive'">
  184. <el-table :data="list" style="width: 100%" v-loading="loading" @row-click="repetitiveTasksClick">
  185. <el-table-column label="执行人" prop="target_info" width="120px">
  186. <template slot-scope="scope">
  187. <span v-for="(item, index) in scope.row.target_info" :key="index">
  188. <span v-if="scope.row.target_info.length == 1 && index == 0">{{ item.name }}</span>
  189. <span v-if="scope.row.target_info.length > 1 && index == 0">{{ item.name }}等{{ scope.row.target_info.length }}人</span>
  190. </span>
  191. </template>
  192. </el-table-column>
  193. <el-table-column label="任务内容" prop="remark">
  194. <template slot-scope="scope">
  195. <span class="font-flex-word" style="max-width: 200px;">{{ scope.row.name || scope.row.remark }}</span>
  196. </template>
  197. </el-table-column>
  198. <el-table-column label="任务积分" prop="point_config.base_point" width="130px">
  199. <template slot-scope="scope">
  200. <span v-if="scope.row.point_config.base_point > 0" class="red">+{{ scope.row.point_config.base_point }} {{ $getTypsName(scope.row.pt_id) }}</span>
  201. <span v-else class="color_green">{{ scope.row.point_config.base_point }} {{ $getTypsName(scope.row.pt_id) }}</span>
  202. </template>
  203. </el-table-column>
  204. <el-table-column label="重复周期" prop="task_cycle" width="220px">
  205. <template slot-scope="scope">
  206. <span v-if="scope.row.task_cycle == '1'">每天0点自动发布,{{ dayTime(scope.row.task_cycle_value) }}截止</span>
  207. <span v-if="scope.row.task_cycle == '2'">
  208. <span>每周一自动发布,周{{ weekList[scope.row.task_cycle_value - 1] }}截止</span>
  209. </span>
  210. <span v-if="scope.row.task_cycle == '3'">每月1号自动发布,{{ scope.row.task_cycle_value }}号截止</span>
  211. </template>
  212. </el-table-column>
  213. <el-table-column label="可见范围" prop="department_info">
  214. <template slot-scope="scope">
  215. <span v-for="(item, index) in scope.row.department_info" :key="index">
  216. {{ item.name }}
  217. <span v-if="scope.row.department_info.length - 1 > index">,</span>
  218. </span>
  219. </template>
  220. </el-table-column>
  221. <el-table-column label="创建时间" prop="create_time" width="140px"></el-table-column>
  222. <el-table-column prop="base_point" label="操作" align="center" width="80px">
  223. <template slot-scope="scope">
  224. <el-dropdown placement="bottom" :show-timeout="150" :hide-timeout="150">
  225. <span class="el-dropdown-links">···</span>
  226. <el-dropdown-menu slot="dropdown">
  227. <el-dropdown-item :disabled="false"><el-button type="text" class="color-blue" v-loading.fullscreen.lock="bodyLoad" @click.stop="copyTask(scope.row)">复制</el-button></el-dropdown-item>
  228. <el-dropdown-item :disabled="false"><el-button type="text" class="color-red" v-loading.fullscreen.lock="bodyLoad" @click.stop="deletes(scope.row, 2)">删除</el-button></el-dropdown-item>
  229. </el-dropdown-menu>
  230. </el-dropdown>
  231. </template>
  232. </el-table-column>
  233. <template slot="empty">
  234. <noData></noData>
  235. </template>
  236. </el-table>
  237. </div>
  238. <center style="padding: 20px 0;">
  239. <el-pagination
  240. background
  241. @size-change="handleSizeChange"
  242. @current-change="handleCurrentChange"
  243. :page-sizes="[10, 20, 50, 100]"
  244. layout="total, sizes, prev, pager, next"
  245. :page-size="formData.page_size"
  246. :current-page="formData.page"
  247. :total="total"
  248. ></el-pagination>
  249. </center>
  250. </div>
  251. <!-- 临时任务 -->
  252. <temporaryTask :dialogVisible.sync="dialogVisible" :trees_ab="trees_v2_ab_module" :isFy="isFy" :modifyData="fyData" :showTitle="'临时任务'"></temporaryTask>
  253. <!-- 临时任务-修改 -->
  254. <temporaryTaskAmend :dialogVisible.sync="dialogVisibleAmend" :trees_ab="trees_v2_ab_module" :showTitle="'任务编辑'" :modifyData="modifyData"></temporaryTaskAmend>
  255. <!-- 悬赏任务 -->
  256. <rewardTask :dialogVisible.sync="rewardTaskShow" :isFy="isFy" :modifyData="fyData" :trees_ab="trees_v2_ab_module" :showTitle="'悬赏任务'"></rewardTask>
  257. <!-- 悬赏任务-修改 -->
  258. <rewardTaskAmend
  259. :dialogVisible.sync="rewardTaskAmendShow"
  260. :trees_ab="trees_v2_ab_module"
  261. ref="rewardTasks"
  262. :showTitle="'任务编辑'"
  263. :rewardTaskAmendData="rewardTaskAmendData"
  264. ></rewardTaskAmend>
  265. <!-- 详情弹窗 -->
  266. <taskDetailsPopup :visible.sync="showDetailPopup" v-if="showDetailPopup" :id="detailId" :title="'任务详情'"></taskDetailsPopup>
  267. <!-- 重复任务详情弹窗 -->
  268. <repeatTaskDetailsPopup :visible.sync="showRepetitiveTasksPopup" v-if="showRepetitiveTasksPopup" :id="detailId" :title="'重复任务详情'"></repeatTaskDetailsPopup>
  269. <!-- 悬赏任务详情弹窗 -->
  270. <rewardTaskDetailsPopup :visible.sync="showRewardTaskDetailsPopup" v-if="showRewardTaskDetailsPopup" :id="detailId" :title="'工作详情'"></rewardTaskDetailsPopup>
  271. </div>
  272. </template>
  273. <script>
  274. import temporaryTask from '@/views/common/temporaryTask';
  275. import temporaryTaskAmend from '@/views/common/temporaryTaskAmend';
  276. import rewardTask from '@/views/common/rewardTask';
  277. import rewardTaskAmend from '@/views/common/rewardTaskAmend';
  278. import taskDetailsPopup from '@/views/common/taskDetailsPopup';
  279. import repeatTaskDetailsPopup from '@/views/common/repeatTaskDetailsPopup';
  280. import rewardTaskDetailsPopup from '@/views/common/rewardTaskDetailsPopup';
  281. export default {
  282. name: 'my_issue',
  283. data() {
  284. return {
  285. weekList: ['一', '二', '三', '四', '五', '六', '日'],
  286. rewardTaskAmendData: {}, //悬赏修改
  287. modifyData: {}, //任务修改
  288. operation_if: false, //操作列显示隐藏
  289. bodyLoad: false,
  290. status: 'assign',
  291. formData: {
  292. status: 'all',
  293. sort: 'publish',
  294. order_by: 'create_time',
  295. pt_id: 0,
  296. page_size: 10,
  297. page: 1,
  298. source_type: '1',
  299. executor_id: '', //执行人
  300. reviewer_id: '', //审批人
  301. content: '' //内容
  302. },
  303. total: null,
  304. list: [],
  305. loading: false,
  306. point_types: null,
  307. task_status: [
  308. { id: 1, name: '全部', code: 'all' },
  309. { id: 2, name: '进行中', code: 'running' },
  310. { id: 3, name: '已完成', code: 'complete' },
  311. { id: 4, name: '已审批', code: 'reviewed' },
  312. // {id: 5, name: '已撤销', code: 'revocation'},
  313. { id: 6, name: '已退回', code: 'refuse' }
  314. ],
  315. sort: [{ id: 2, name: '按发布时间', code: 'publish' }, { id: 1, name: '按截止时间', code: 'expire' }],
  316. order_by: [{ id: 2, name: '按发布时间', code: 'create_time' }, { id: 1, name: '按截止时间', code: 'expire_time' }],
  317. tabsOption: [{ label: '我指派的', name: 'assign' }, { label: '我悬赏的', name: 'reward' }, { label: '重复任务', name: 'repetitive' }],
  318. dialogVisible: false,
  319. dialogVisibleAmend: false,
  320. rewardTaskShow: false,
  321. rewardTaskAmendShow: false,
  322. showDetailPopup: false,
  323. showRepetitiveTasksPopup: false,
  324. showRewardTaskDetailsPopup: false,
  325. detailId: 0,
  326. trees_v2_ab_module: {
  327. A: [],
  328. B: [],
  329. rule_tree: []
  330. },
  331. employee_map: [], //人员列表
  332. //重复任务复用
  333. isFy:false,
  334. fyData:{},
  335. };
  336. },
  337. components: {temporaryTask, rewardTask, rewardTaskAmend, temporaryTaskAmend, taskDetailsPopup, repeatTaskDetailsPopup, rewardTaskDetailsPopup },
  338. watch: {
  339. dialogVisible(val){
  340. if(!val){
  341. this.isFy=false;
  342. }
  343. },
  344. rewardTaskShow(val){
  345. if(!val){
  346. this.isFy=false;
  347. }
  348. },
  349. status(val) {
  350. this.formData.executor_id = '';
  351. this.formData.reviewer_id = '';
  352. this.formData.content = '';
  353. this.formData.page = 1;
  354. this.formData.status = 'all';
  355. this.formData.sort = 'publish';
  356. this.formData.order_by = 'create_time';
  357. this.formData.pt_id = 0;
  358. this.list = [];
  359. this.get_list();
  360. },
  361. 'formData.status'() {
  362. // debugger
  363. this.formData.page = 1;
  364. this.list = [];
  365. this.get_list();
  366. },
  367. 'formData.sort'() {
  368. this.formData.page = 1;
  369. this.list = [];
  370. this.get_list();
  371. },
  372. 'formData.order_by'() {
  373. this.formData.page = 1;
  374. this.list = [];
  375. this.get_list();
  376. },
  377. 'formData.pt_id'() {
  378. this.formData.page = 1;
  379. this.list = [];
  380. this.get_list();
  381. },
  382. 'formData.executor_id'() {
  383. this.formData.page = 1;
  384. this.list = [];
  385. this.get_list();
  386. },
  387. 'formData.reviewer_id'() {
  388. this.formData.page = 1;
  389. this.list = [];
  390. this.get_list();
  391. }
  392. },
  393. created() {
  394. this.getRuleItemData(); //获取AB分细则
  395. },
  396. mounted() {
  397. this.getUserDetail();
  398. if (this.$route.query.type == 1) {
  399. this.dialogVisible = true;
  400. } else if (this.$route.query.type == 2) {
  401. this.rewardTaskShow = true;
  402. }
  403. this.get_list();
  404. this.point_types = this.getPointTypes();
  405. this.getEmployee(); //员工列表
  406. },
  407. methods: {
  408. list_approver(id) {
  409. let arr = this.employee_map.filter(x => x.id == id);
  410. return arr[0] ? arr[0].name : '';
  411. },
  412. dayTime(item) {
  413. return item > 9 ? item + ': 00' : '0' + item + ': 00';
  414. },
  415. getContent() {
  416. this.formData.page = 1;
  417. this.list = [];
  418. this.get_list();
  419. },
  420. //获取员工列表
  421. getEmployee() {
  422. this.$axios('get', '/api/employee/index', { dept_id: 0, keywords: '', page: 1, page_size: 3000, is_official: 1 }).then(res => {
  423. let list = res.data.data.list;
  424. this.employee_map = list;
  425. });
  426. },
  427. getUserDetail() {
  428. this.$axios('get', '/api/employee/detail').then(res => {
  429. this.$setUserData(res.data.data.user);
  430. });
  431. },
  432. //悬赏修改
  433. offerARewardAmend2(item) {
  434. this.rewardTaskAmendShow = true;
  435. this.$refs.rewardTasks.forTheTaskLoading = true;
  436. let params = {
  437. task_id: item.id
  438. };
  439. this.$axios('get', '/api/integral/task', params)
  440. .then(res => {
  441. if (res.data.code == 1) {
  442. this.rewardTaskAmendData = res.data.data;
  443. } else {
  444. self.$message.error(res.data.msg);
  445. }
  446. })
  447. .finally(() => {
  448. this.$refs.rewardTasks.forTheTaskLoading = false;
  449. });
  450. },
  451. //重复任务复用
  452. copyTask(item){
  453. this.$axios('get', '/api/integral/schedule', { schedule_id: item.id }).then(res => {
  454. let data=res.data.data
  455. data.task_file_list=data.file_list;
  456. data.id="";
  457. this.isFy=true;
  458. this.fyData=data;
  459. this.downClick(item.type)
  460. });
  461. },
  462. //任务修改
  463. issueAmend1(item) {
  464. this.modifyData = item;
  465. this.dialogVisibleAmend = true;
  466. },
  467. //删除---我指派的、我悬赏的、重复任务 (重复任务需等后端接口)
  468. deletes(item, s) {
  469. let self = this;
  470. this.$message.closeAll();
  471. self.$confirm('删除此任务将会删除其相关记录和积分数据,确认删除吗?', '删除任务', {
  472. confirmButtonText: '确定',
  473. cancelButtonText: '取消',
  474. type: 'warning'
  475. }).then(() => {
  476. self.$axios(
  477. s == 0 ? 'get' : s == 1 ? 'get' : 'get',
  478. s == 0 ? '/api/integral/work/delete' : s == 1 ? '/api/integral/task/delete' : '/api/integral/schedule/delete',
  479. s == 0 ? { work_id: item.id } : s == 1 ? { task_id: item.id } : { schedule_id: item.id }
  480. ).then(res => {
  481. if (res.data.code == 1) {
  482. if (this.formData.page > 1) {
  483. if (self.list.length == 1) {
  484. this.formData.page = this.formData.page - 1;
  485. }
  486. }
  487. this.get_list();
  488. self.$message.success(res.data.msg);
  489. } else {
  490. self.$message.error(res.data.msg);
  491. }
  492. });
  493. });
  494. },
  495. // 点击详情
  496. rowClick(row) {
  497. this.showDetailPopup = true;
  498. this.detailId = parseInt(row.id);
  499. },
  500. // 重复任务详情
  501. repetitiveTasksClick(row) {
  502. this.showRepetitiveTasksPopup = true;
  503. this.detailId = parseInt(row.id);
  504. },
  505. // 悬赏任务详情
  506. rewardTasksClick(row) {
  507. this.showRewardTaskDetailsPopup = true;
  508. this.detailId = parseInt(row.id);
  509. },
  510. // 发布临时任务 和 悬赏任务
  511. downClick(val) {
  512. if (val == 1) {
  513. this.dialogVisible = true;
  514. } else {
  515. this.rewardTaskShow = true;
  516. }
  517. },
  518. // 获取积分类型
  519. getPointTypes() {
  520. let point =this.$getCache('types');
  521. point.unshift({ code: 'all', id: 0, name: '全部' });
  522. return point;
  523. },
  524. // 页码变更
  525. handleCurrentChange(val) {
  526. this.formData.page = val;
  527. this.get_list();
  528. },
  529. handleSizeChange(val) {
  530. this.formData.page_size = val;
  531. this.get_list();
  532. },
  533. get_list() {
  534. let self = this;
  535. this.list=[];
  536. self.loading = true;
  537. let params = JSON.parse(JSON.stringify(this.formData));
  538. params.pt_id == 0 ? delete params.pt_id : '';
  539. params.executor_id == '' ? delete params.executor_id : '';
  540. params.reviewer_id == '' ? delete params.reviewer_id : '';
  541. if (self.status == 'assign') {
  542. delete params.order_by;
  543. } else if (self.status == 'reward') {
  544. delete params.executor_id;
  545. delete params.status;
  546. delete params.sort;
  547. } else {
  548. delete params.status;
  549. delete params.sort;
  550. delete params.order_by;
  551. delete params.pt_id;
  552. }
  553. self.$axios(
  554. 'get',
  555. self.status == 'assign' ? '/api/integral/work/list/publisher' : self.status == 'reward' ? '/api/integral/task/publish/list' : '/api/integral/schedule/list',
  556. params
  557. )
  558. .then(res => {
  559. //数据过多的情况延迟较大
  560. if (res.data.code == 1) {
  561. //传入发布者ID进行判断
  562. self.list = res.data.data.list;
  563. self.total = res.data.data.total;
  564. } else {
  565. self.$message.error(res.data.data.msg);
  566. this.get_list();
  567. }
  568. })
  569. .finally(() => {
  570. self.loading = false;
  571. });
  572. },
  573. // 获取ab规则细则
  574. getRuleItemData() {
  575. let a = this.$axios('get', '/api/integral/rule/trees', { cycle_type: '1', pt_id: '2' }, 'v2');
  576. let b = this.$axios('get', '/api/integral/rule/trees', { cycle_type: '1', pt_id: '3' }, 'v2');
  577. let c = this.$axios('get', '/api/integral/rule/trees', { cycle_type: '1' });
  578. Promise.all([a, b, c]).then(res => {
  579. this.trees_v2_ab_module.A = res[0].data.data.tree;
  580. this.trees_v2_ab_module.B = res[1].data.data.tree;
  581. this.trees_v2_ab_module.rule_tree = this.flatten(res[2].data.data.rule_tree);
  582. this.trees_v2_ab_module.rule_tree_all = this.getTreeData(res[2].data.data.rule_tree);
  583. });
  584. },
  585. getTreeData(data) {
  586. for (var i = 0; i < data.length; i++) {
  587. if (data[i].child.length < 1) {
  588. // child若为空数组,则将child设为undefined
  589. data[i].child = undefined;
  590. } else {
  591. // child若不为空数组,则继续 递归调用 本方法
  592. this.getTreeData(data[i].child);
  593. }
  594. }
  595. return data;
  596. },
  597. flatten(arr) {
  598. return arr.reduce((result, item) => {
  599. return result.concat(item, Array.isArray(item.child) ? this.flatten(item.child) : []);
  600. }, []);
  601. }
  602. }
  603. };
  604. </script>
  605. <style scoped lang="scss">
  606. .box {
  607. min-height: calc(100vh - 184px);
  608. min-width: 800px;
  609. background-color: #fff;
  610. padding: 20px;
  611. & .color_yelllo {
  612. color: #e6a23c;
  613. }
  614. & .color_green {
  615. color: #67c23a;
  616. }
  617. & .color_3 {
  618. color: #f56c6c;
  619. }
  620. & .color_4 {
  621. color: #67c23a;
  622. }
  623. & .color_5 {
  624. color: #f56c6c;
  625. }
  626. & .color_yelllo2 {
  627. color: #ffa939;
  628. }
  629. }
  630. $red: #f56c6c;
  631. .color-red {
  632. color: $red;
  633. &:hover {
  634. color: #f14141;
  635. }
  636. }
  637. .color-blue {
  638. color: #26A2FF;
  639. &:hover {
  640. color: #26A2FF;
  641. }
  642. }
  643. .delicon {
  644. font-size: 20px;
  645. float: right;
  646. }
  647. .el-dropdown-links {
  648. font-size: 20px;
  649. cursor: pointer;
  650. color: #606266;
  651. }
  652. ::v-deep .el-table tr:hover {
  653. cursor: pointer;
  654. }
  655. </style>