repeatTaskDetailsPopup.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. <template>
  2. <div>
  3. <!-- 重复任务详情弹窗 -->
  4. <el-drawer :visible.sync="Delay_to_open" :with-header="false" :size="'500px'" :before-close="handleClose" :custom-class="'drawer_details'">
  5. <div class="details_title">{{ title }}</div>
  6. <div class="details_content" v-if="workDetailData" v-loading="loading">
  7. <!-- <ul>-->
  8. <!-- <li class="flex-box">-->
  9. <!-- <div class="label">任务内容</div>-->
  10. <!-- <div class="content_text">{{ workDetailData.name }}</div>-->
  11. <!-- </li>-->
  12. <!-- <li class="flex-box">-->
  13. <!-- <div class="label">任务备注</div>-->
  14. <!-- <div class="content_text orange">{{ workDetailData.remark }}</div>-->
  15. <!-- </li>-->
  16. <!-- <li class="flex-box">-->
  17. <!-- <div class="label">执行周期</div>-->
  18. <!-- <div class="content_text orange">{{workDetailData.target_info.length>0? '临时任务-':'悬赏任务-'}}{{ workDetailData.task_cycle_mark }}</div>-->
  19. <!-- </li>-->
  20. <!-- <li class="flex-box" v-if="workDetailData.point_config">-->
  21. <!-- <div class="label">任务积分</div>-->
  22. <!-- <div class="content_text orange">-->
  23. <!-- {{ workDetailData.point_config.base_point }}-->
  24. <!-- <span>{{ workDetailData.pt_id == 2 ? 'A分' : workDetailData.pt_id == 3 ? 'B分' : '' }}</span>-->
  25. <!-- </div>-->
  26. <!-- </li>-->
  27. <!-- <li class="flex-box" v-if="workDetailData.file_list && workDetailData.file_list.length > 0">-->
  28. <!-- <div class="label">任务附件</div>-->
  29. <!-- <div class="content_text">-->
  30. <!-- <el-image-->
  31. <!-- v-for="(item, index) in workDetailData.file_list"-->
  32. <!-- :key="index"-->
  33. <!-- style="width: 100px; height: 100px;margin-right:8px"-->
  34. <!-- :src="item"-->
  35. <!-- :preview-src-list="workDetailData.file_list"-->
  36. <!-- ></el-image>-->
  37. <!-- </div>-->
  38. <!-- </li>-->
  39. <!-- <li class="flex-box">-->
  40. <!-- <div class="label">发布人</div>-->
  41. <!-- <div class="content_text">{{ workDetailData.owner_name }}</div>-->
  42. <!-- </li>-->
  43. <!-- <li class="flex-box">-->
  44. <!-- <div class="label">截止时间</div>-->
  45. <!-- <div class="content_text">-->
  46. <!-- <span v-if="workDetailData.task_cycle == '1'">{{workDetailData.task_cycle_mark}}{{ dayTime(workDetailData.task_cycle_value) }}截止</span>-->
  47. <!-- <span v-if="workDetailData.task_cycle == '2'">-->
  48. <!-- <span>{{workDetailData.task_cycle_mark}}{{ weekList[workDetailData.task_cycle_value - 1] }}截止</span>-->
  49. <!-- </span>-->
  50. <!-- <span v-if="workDetailData.task_cycle == '3'">{{workDetailData.task_cycle_mark}}{{ workDetailData.task_cycle_value }}号截止</span>-->
  51. <!-- </div>-->
  52. <!-- </li>-->
  53. <!-- <li class="flex-box" v-if="workDetailData.schedule_expire_time">-->
  54. <!-- <div class="label">有效日期</div>-->
  55. <!-- <div class="content_text" >-->
  56. <!-- <span v-if="!isExpire(workDetailData.schedule_expire_time)" >{{workDetailData.schedule_expire_time}}</span>-->
  57. <!-- <el-alert v-else :title="workDetailData.schedule_expire_time" type="warning" :closable="false" ></el-alert>-->
  58. <!-- </div>-->
  59. <!-- </li>-->
  60. <!-- <li class="flex-box" v-if="workDetailData.department_info">-->
  61. <!-- <div class="label">可见范围</div>-->
  62. <!-- <div class="content_text" v-if="workDetailData.department_info.length>0">-->
  63. <!-- <span v-for="(item,index) in workDetailData.department_info" :key="index">-->
  64. <!-- {{item.name}}-->
  65. <!-- <span v-if="(workDetailData.department_info.length - 1) > index"> ,</span>-->
  66. <!-- </span>-->
  67. <!-- </div>-->
  68. <!-- <div class="content_text" v-else>全公司</div>-->
  69. <!-- </li>-->
  70. <!-- <li class="flex-box" v-if="workDetailData.point_config">-->
  71. <!-- <div class="label">逾期扣分</div>-->
  72. <!-- <div class="content_text">{{ workDetailData.point_config.timeout_deduction_point }}/天</div>-->
  73. <!-- </li>-->
  74. <!-- <li class="flex-box" v-if="workDetailData.point_config">-->
  75. <!-- <div class="label">提前奖分</div>-->
  76. <!-- <div class="content_text">{{ workDetailData.point_config.ahead_award_point }}/天</div>-->
  77. <!-- </li>-->
  78. <!-- </ul>-->
  79. <!-- <el-row style=" margin-bottom: 20px;">-->
  80. <!-- <el-col :span="24" style="line-height: 30px;">审批人</el-col>-->
  81. <!-- <el-col :span="24">-->
  82. <!-- <div>-->
  83. <!-- <userImage class="fl" :id="workDetailData.reviewer_id" :user_name="workDetailData.reviewer_name" width="50px" height="50px" style=" margin-right: 15px;"></userImage>-->
  84. <!-- <p style="margin: 0; line-height: 50px;">{{ workDetailData.reviewer_name }}</p>-->
  85. <!-- </div>-->
  86. <!-- </el-col>-->
  87. <!-- </el-row>-->
  88. <!-- <el-row v-if="workDetailData.target_info.length>0">-->
  89. <!-- <el-col :span="24" style="line-height: 30px;">执行人</el-col>-->
  90. <!-- <el-col :span="24">-->
  91. <!-- <div v-for="(item, index) in workDetailData.target_info" style="margin-bottom: 10px;">-->
  92. <!-- <userImage class="fl" :id="item.id" :user_name="item.name" width="50px" height="50px" style=" margin-right: 15px;"></userImage>-->
  93. <!-- <p style="margin: 0; line-height: 50px;">{{ item.name }}</p>-->
  94. <!-- </div>-->
  95. <!-- </el-col>-->
  96. <!-- </el-row>-->
  97. <el-card shadow="always">
  98. <template slot="header">
  99. <div class="flex-box flex-v-ce">
  100. <userImage
  101. style="margin-right: 15px;"
  102. width="50px"
  103. height="50px"
  104. class="fl"
  105. :id="workDetailData.owner_id"
  106. :user_name="workDetailData.owner_name"
  107. :img_url="workDetailData.owner_img_url"
  108. />
  109. <div>
  110. {{workDetailData.owner_name}}
  111. {{ $getTypsName(workDetailData.pt_id) }}{{scheduleTypeMark}}&nbsp;
  112. <el-tag>{{ workDetailData.point_config.base_point }}分</el-tag>
  113. </div>
  114. </div>
  115. </template>
  116. <el-descriptions
  117. :title="scheduleTypeMark + '信息'"
  118. direction="vertical"
  119. :column="2"
  120. size="small"
  121. :label-style="{width:'80px',textAlign:'center'}"
  122. :content-style="{width:'80px',textAlign: 'center'}"
  123. border
  124. >
  125. <el-descriptions-item :label="scheduleTypeMark + '内容'">
  126. {{workDetailData.name}}
  127. </el-descriptions-item>
  128. <el-descriptions-item v-if="workDetailData.remark" :label="scheduleTypeMark + '备注'">
  129. {{workDetailData.remark}}
  130. </el-descriptions-item>
  131. <el-descriptions-item label="执行周期">
  132. {{workDetailData.target_info.length>0? '临时任务-':'悬赏任务-'}}{{ workDetailData.task_cycle_mark }}
  133. </el-descriptions-item>
  134. <el-descriptions-item
  135. v-if="workDetailData.point_config"
  136. :label="scheduleTypeMark + '积分'"
  137. >
  138. {{ workDetailData.point_config.base_point }}
  139. <span>{{ $getTypsName(workDetailData.pt_id) }}</span>
  140. </el-descriptions-item>
  141. <el-descriptions-item
  142. v-if="workDetailData.file_list && workDetailData.file_list.length > 0"
  143. title="附件"
  144. >
  145. <el-image
  146. v-for="(item, index) in workDetailData.file_list"
  147. :key="index"
  148. style="width: 100px; height: 100px;margin-right:8px"
  149. :src="item"
  150. :preview-src-list="workDetailData.file_list"
  151. ></el-image>
  152. </el-descriptions-item>
  153. <el-descriptions-item
  154. label="截止时间"
  155. >
  156. <span v-if="workDetailData.task_cycle == '1'">{{workDetailData.task_cycle_mark}}{{ dayTime(workDetailData.task_cycle_value) }}截止</span>
  157. <span v-if="workDetailData.task_cycle == '2'">
  158. <span>{{workDetailData.task_cycle_mark}}{{ weekList[workDetailData.task_cycle_value - 1] }}截止</span>
  159. </span>
  160. <span v-if="workDetailData.task_cycle == '3'">{{workDetailData.task_cycle_mark}}{{ workDetailData.task_cycle_value }}号截止</span>
  161. </el-descriptions-item>
  162. <el-descriptions-item
  163. v-if="workDetailData.schedule_expire_time"
  164. label="有效日期"
  165. >
  166. <span v-if="!isExpire(workDetailData.schedule_expire_time)" >{{workDetailData.schedule_expire_time}}</span>
  167. <el-alert v-else :title="workDetailData.schedule_expire_time" type="warning" :closable="false" ></el-alert>
  168. </el-descriptions-item>
  169. <el-descriptions-item
  170. v-if="workDetailData.department_info"
  171. label="可见范围"
  172. >
  173. <div v-if="workDetailData.department_info.length>0">
  174. <span v-for="(item,index) in workDetailData.department_info" :key="index">
  175. {{item.name}}
  176. <span v-if="(workDetailData.department_info.length - 1) > index"> ,</span>
  177. </span>
  178. </div>
  179. <div v-else>
  180. 全公司
  181. </div>
  182. </el-descriptions-item>
  183. <template v-if="workDetailData.point_config">
  184. <el-descriptions-item
  185. label="逾期扣分"
  186. >
  187. {{ workDetailData.point_config.timeout_deduction_point }}&nbsp;B/天
  188. </el-descriptions-item>
  189. <el-descriptions-item
  190. label="提前奖分"
  191. >
  192. {{ workDetailData.point_config.ahead_award_point }}&nbsp;B分/天
  193. </el-descriptions-item>
  194. </template>
  195. <el-descriptions-item label="审批人">
  196. <div style="width: fit-content;margin: 0 auto;">
  197. <userImage
  198. width="50px"
  199. height="50px"
  200. class="fl"
  201. :id="workDetailData.reviewer_id"
  202. :user_name="workDetailData.reviewer_name"
  203. :img_url="workDetailData.reviewer_img_url"
  204. />
  205. <div>{{ workDetailData.reviewer_name }}</div>
  206. </div>
  207. </el-descriptions-item>
  208. <el-descriptions-item
  209. v-if="workDetailData.target_info.length > 0"
  210. label="执行人"
  211. >
  212. <div style="width: fit-content;margin: 0 auto;">
  213. <div
  214. v-for="(item, index) in workDetailData.target_info"
  215. :key="index"
  216. style="margin-bottom: 10px; display: inline-block;margin-right: 5px;"
  217. >
  218. <userImage class="fl" :id="item.id" :user_name="item.name" width="50px" height="50px" />
  219. <div>{{ item.name }}</div>
  220. </div>
  221. </div>
  222. </el-descriptions-item>
  223. </el-descriptions>
  224. </el-card>
  225. </div>
  226. </el-drawer>
  227. </div>
  228. </template>
  229. <script>
  230. import Template from "../../../examine/components/Template.vue";
  231. export default {
  232. name: 'repeatTaskDetailsPopup',
  233. props: {
  234. title: {
  235. type: String,
  236. default: ''
  237. },
  238. visible: {
  239. type: Boolean,
  240. default: false
  241. },
  242. id: {
  243. type: Number,
  244. default: 0
  245. }
  246. },
  247. data() {
  248. return {
  249. Delay_to_open: false, //打开抽屉
  250. loading: false,
  251. workDetailData: {
  252. target_info:[]
  253. },
  254. weekList: ['一', '二', '三', '四', '五', '六', '日']
  255. };
  256. },
  257. components: {Template},
  258. watch: {},
  259. computed:{
  260. scheduleTypeMark(){
  261. return !this.workDetailData ? '--' : (this.workDetailData.type === 2 ? '悬赏' : '任务')
  262. }
  263. },
  264. mounted() {
  265. this.getData();
  266. this.Delay_to_open = this.visible; //更换打开抽屉时机,避免打开两次
  267. },
  268. methods: {
  269. dayTime(item) {
  270. return item > 9 ? item + ': 00' : '0' + item + ': 00';
  271. },
  272. // 关闭弹窗
  273. handleClose() {
  274. this.$emit('update:visible', false);
  275. },
  276. // 获取数据
  277. getData() {
  278. let self = this;
  279. self.loading = true;
  280. let data = { schedule_id: this.id };
  281. self
  282. .$axiosUser('get', '/api/pro/integral/schedule', data)
  283. .then(res => {
  284. if (res.data.code == 1) {
  285. self.workDetailData = res.data.data;
  286. }
  287. self.loading = false;
  288. })
  289. .catch(e => {
  290. self.$message.error(e.data.msg);
  291. self.loading = false;
  292. });
  293. },
  294. isExpire(expire_time){
  295. if (!expire_time) return false
  296. let now = new Date();
  297. let expire_date = new Date(expire_time);
  298. return now >= expire_date;
  299. }
  300. }
  301. };
  302. </script>
  303. <style lang="scss" scoped="scoped">
  304. .details_content {
  305. & .d_userMessage {
  306. margin-left: 10px;
  307. }
  308. & .d_userMessage div:nth-child(1) {
  309. font-size: 16px;
  310. margin-bottom: 8px;
  311. }
  312. & .d_userMessage div:nth-child(2) {
  313. font-size: 12px;
  314. color: #909399;
  315. }
  316. & .d_progress {
  317. padding: 12px 0;
  318. border-bottom: 1px solid #f1f1f1;
  319. margin-bottom: 10px;
  320. }
  321. & ul {
  322. padding: 12px 0;
  323. border-bottom: 1px solid #f1f1f1;
  324. & li {
  325. padding: 6px 0;
  326. }
  327. & .label {
  328. width: 80px;
  329. text-align: left;
  330. color: #909399;
  331. }
  332. & .content_text {
  333. flex: 1;
  334. }
  335. }
  336. }
  337. </style>