rewardTask.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630
  1. <template>
  2. <div>
  3. <!-- 悬赏任务弹窗 -->
  4. <el-dialog :title="showTitle" :visible.sync="dialogVisible" :close-on-click-modal="false" :before-close="closeDialog" width="600px" top="3%">
  5. <div v-loading="forTheTaskLoading">
  6. <el-form :model="formData" ref="formData" label-width="80px">
  7. <el-form-item
  8. label="任务内容"
  9. prop="task_name"
  10. :rules="[{ required: true, message: '请填写任务内容', trigger: 'blur' }, { min: 3, max: 20, message: '长度在 3 到 20 个字符', trigger: 'blur' }]"
  11. >
  12. <el-input
  13. type="textarea"
  14. rows="3"
  15. maxlength="20"
  16. show-word-limit
  17. v-model="formData.task_name"
  18. placeholder="请输入任务内容(限20字)"
  19. class="reward_textarea"
  20. ></el-input>
  21. </el-form-item>
  22. <el-form-item label="积分类型" prop="pt_id" :rules="[{ required: true, message: '请选择积分类型', trigger: 'blur' }]">
  23. <el-radio-group v-model="formData.pt_id">
  24. <el-radio v-for="(item, index) in point_types" :key="index" v-show="item.code !== 'JX'" :label="item.id">{{ item.name }}</el-radio>
  25. </el-radio-group>
  26. </el-form-item>
  27. <el-form-item
  28. :label="trees_PtId(formData.pt_id) +'规则'"
  29. prop="tree_echo"
  30. >
  31. <el-cascader
  32. v-model="formData.tree_echo"
  33. ref="ruleItem"
  34. :popper-class="'itemClass'"
  35. filterable
  36. clearable
  37. :options="formData.pt_id == 2 ? trees_ab.A : trees_ab.B"
  38. @change="ruleItemChange"
  39. :show-all-levels="false"
  40. :props="{ children: 'child', label: 'name', value: 'id' }"
  41. ></el-cascader>
  42. </el-form-item>
  43. <el-form-item prop="range_type" v-if="formData.range_type != 0">
  44. <div style="line-height: 24px;" v-show="formData.range_type == 1">
  45. {{ min }}
  46. <span class="blue">{{ trees_PtId(formData.pt_id) }}</span>
  47. </div>
  48. <div style="line-height: 24px;" v-show="formData.range_type == 2">
  49. {{ min }} ~ {{ max }}
  50. <span class="blue">{{ trees_PtId(formData.pt_id) }}</span>
  51. </div>
  52. <div style="line-height: 24px;">{{ treeName }}</div>
  53. </el-form-item>
  54. <el-form-item label="任务积分" prop="base_point" :rules="[{ required: true, message: '请填写任务积分', trigger: 'blur' }]">
  55. <el-input-number v-if="formData.range_type == 0" v-model.number="formData.base_point"></el-input-number>
  56. <el-input-number v-else :disabled="formData.range_type == 1" v-model.number="formData.base_point" :min="min" :max="max"></el-input-number>
  57. </el-form-item>
  58. <el-form-item label="审批人" prop="reviewer_id" :rules="[{ required: true, message: '请选择审批人', trigger: 'change' }]">
  59. <el-row>
  60. <el-col :span="18">
  61. <el-input auto-complete="off" v-model="reviewerName" placeholder="请选择审批人"></el-input>
  62. <div @click="show_reviewer_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
  63. </el-col>
  64. </el-row>
  65. <el-dialog title="选择审批人" width="640px" :visible.sync="show_reviewer_selector" append-to-body :before-close="handleClose">
  66. <EmployeeSelector
  67. v-if="show_reviewer_selector"
  68. ref="members"
  69. :multi="false"
  70. :use_Administrator_list="true"
  71. :selected="reviewer_selected"
  72. @confirm="reviewer_confirm"
  73. />
  74. <span slot="footer" class="dialog-footer">
  75. <el-button @click="show_reviewer_selector = false">取 消</el-button>
  76. <el-button type="primary" @click="submitMembers('members')">确 定</el-button>
  77. </span>
  78. </el-dialog>
  79. </el-form-item>
  80. <el-form-item label="截止日期" prop="expire_time" v-if="formData.task_cycle == 0" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
  81. <el-date-picker
  82. v-model="formData.expire_time"
  83. type="datetime"
  84. placeholder="选择日期时间"
  85. format="yyyy-MM-dd HH:mm"
  86. value-format="yyyy-MM-dd HH:mm"
  87. default-time="18:00"
  88. ></el-date-picker>
  89. </el-form-item>
  90. <el-form-item label="截止日期" prop="task_expire_day" v-if="formData.task_cycle == 1" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
  91. <el-select v-model="formData.task_expire_day" placeholder="请选择截止日期">
  92. <el-option v-for="item in columns1" :key="item.value" :label="item.name" :value="item.value"></el-option>
  93. </el-select>
  94. </el-form-item>
  95. <el-form-item label="截止日期" prop="task_expire_day" v-if="formData.task_cycle == 2" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
  96. <el-select v-model="formData.task_expire_day" placeholder="请选择截止日期">
  97. <el-option v-for="item in columns2" :key="item.value" :label="item.name" :value="item.value"></el-option>
  98. </el-select>
  99. </el-form-item>
  100. <el-form-item label="截止日期" prop="task_expire_day" v-if="formData.task_cycle == 3" :rules="[{ required: true, message: '请选择截止日期', trigger: 'blur' }]">
  101. <el-select v-model="formData.task_expire_day" placeholder="请选择截止日期">
  102. <el-option v-for="item in columns3" :key="item.value" :label="item.name" :value="item.value"></el-option>
  103. </el-select>
  104. </el-form-item>
  105. <el-form-item label="任务备注" prop="task_remark" :rules="[{ max: 300, message: '长度不能超过 300 个字', trigger: 'blur' }]">
  106. <el-input type="textarea" :rows="5" v-model="formData.task_remark" maxlength="300" show-word-limit placeholder="请输入任务内容(限300字)"></el-input>
  107. </el-form-item>
  108. <el-form-item label="图片">
  109. <upload
  110. :headers="Xtoken"
  111. class="avatar-uploader"
  112. :action="'https://' + 'integralsys.oss-cn-shenzhen.aliyuncs.com'"
  113. :show-file-list="true"
  114. :file-list="fileList"
  115. :on-success="handleFilesSuccess"
  116. :on-preview="onFilePreView"
  117. :before-upload="beforeUpload"
  118. :on-remove="onFileRemove"
  119. :limit="3"
  120. :multiple="true"
  121. ref="clearPicture"
  122. >
  123. <el-button size="small" type="primary">点击上传</el-button>
  124. (最多选择3张)
  125. </upload>
  126. </el-form-item>
  127. <el-form-item label="重复周期" prop="task_cycle">
  128. <el-select v-model="formData.task_cycle" placeholder="请选择重复周期">
  129. <el-option v-for="(item, index) in task_cycle_arr" :key="index" :label="item.name" :value="item.value"></el-option>
  130. </el-select>
  131. </el-form-item>
  132. <el-form-item label="谁可以看" prop="dept_ids">
  133. <el-cascader
  134. size="medium"
  135. class="date-picker-width"
  136. v-model="dept_name"
  137. @change="handleChange"
  138. :options="dept_tree"
  139. collapse-tags
  140. :props="{ checkStrictly: true, value: 'id', label: 'name', multiple: true, children: '_child' }"
  141. ref="dept"
  142. clearable
  143. placeholder="全公司"
  144. ></el-cascader>
  145. <span style="color:#b5b7bb;padding-left:10px;">选中的部门可查看或领取任务</span>
  146. </el-form-item>
  147. <div style="margin-left: 80px; margin-bottom: 8px;">以天为单位,每 提前/逾期 一天 加分/扣分</div>
  148. <el-form-item label="提前奖分" prop="ahead_award_point">
  149. <el-input v-model="formData.ahead_award_point" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入每日奖分" style="width: 150px;"></el-input> B分/每天,
  150. 奖分上限 &nbsp;<el-input v-model="formData.ahead_award_point_limit" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入奖分上限" style="width: 150px;"></el-input> B分
  151. </el-form-item>
  152. <el-form-item label="逾期扣分" prop="timeout_deduction_point" >
  153. <el-input v-model="formData.timeout_deduction_point" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入每日扣分" style="width: 150px;"></el-input> B分/每天,
  154. 扣分上限 &nbsp;<el-input v-model="formData.timeout_deduction_point_limit" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入扣分上限" style="width: 150px;"></el-input> B分
  155. </el-form-item>
  156. <el-form-item v-show="false" prop="ahead_award_point_limit" ></el-form-item>
  157. <el-form-item v-show="false" prop="timeout_deduction_point_limit" ></el-form-item>
  158. <el-form-item>
  159. <div class="flex-box-end">
  160. <el-button @click="resetForm('formData')">取消</el-button>
  161. <el-button type="primary" @click="sub('formData')">提交</el-button>
  162. </div>
  163. </el-form-item>
  164. </el-form>
  165. </div>
  166. </el-dialog>
  167. </div>
  168. </template>
  169. <script>
  170. import moment from 'moment';
  171. import EmployeeSelector from '@/components/EmployeeSelector.vue';
  172. import upload from '@/components/upload';
  173. export default {
  174. name: 'bonusPoints',
  175. props: {
  176. employee_not_select: {
  177. type: Array,
  178. default: () => {
  179. return [];
  180. }
  181. },
  182. dialogVisible: {
  183. type: Boolean,
  184. default: false
  185. },
  186. showTitle: {
  187. type: String,
  188. default: ''
  189. },
  190. trees_ab: {
  191. type: Object,
  192. default: {}
  193. },
  194. },
  195. data() {
  196. return {
  197. //图片附件
  198. Xtoken: { 'X-Token': this.$getToken() },
  199. fileList: [],
  200. // treesAb: [],
  201. max: 0,
  202. min: 0,
  203. treeName: '',
  204. dept_name: [],
  205. dept_tree: [],
  206. forTheTaskLoading: false,
  207. formData: {
  208. task_type: '1',
  209. pt_id: 2,
  210. task_name: '',
  211. task_remark: '',
  212. base_point: '0',
  213. range_type: 0,
  214. rule_id: 0,
  215. file_list: [],
  216. tree_echo: [],//用于编辑任务时的规则回显
  217. expire_time: moment().format('YYYY-MM-DD 18:00'),
  218. task_expire_day: '',
  219. targets: [],
  220. reviewer_id: '',
  221. task_cycle: 0,
  222. timeout_deduction_point: null,
  223. timeout_deduction_point_limit: null,
  224. ahead_award_point: null,
  225. ahead_award_point_limit: null,
  226. dept_ids: []
  227. },
  228. point_types: [],
  229. // 执行者
  230. // executorName: null,
  231. // show_approval_selector: false,
  232. // approval_selected: {dept: [],employee:[]},
  233. // approval_not_select: [],
  234. // employee_list: this.$store.getters.user_info.employee_detail.manage_scope,
  235. // 审批人
  236. reviewerName: null,
  237. reviewer_not_select: [],
  238. reviewer_selected: { dept: [], employee: [] },
  239. show_reviewer_selector: false,
  240. // 重复周期
  241. task_cycle_arr: [{ value: 0, name: '不重复' }, { value: 1, name: '每天重复' }, { value: 2, name: '每周重复' }, { value: 3, name: '每月重复' }],
  242. // 周期时间
  243. columns1: [
  244. { name: '01:00', value: 1 },
  245. { name: '02:00', value: 2 },
  246. { name: '03:00', value: 3 },
  247. { name: '04:00', value: 4 },
  248. { name: '05:00', value: 5 },
  249. { name: '06:00', value: 6 },
  250. { name: '07:00', value: 7 },
  251. { name: '08:00', value: 8 },
  252. { name: '09:00', value: 9 },
  253. { name: '10:00', value: 10 },
  254. { name: '11:00', value: 11 },
  255. { name: '12:00', value: 12 },
  256. { name: '13:00', value: 13 },
  257. { name: '14:00', value: 14 },
  258. { name: '15:00', value: 15 },
  259. { name: '16:00', value: 16 },
  260. { name: '17:00', value: 17 },
  261. { name: '18:00', value: 18 },
  262. { name: '19:00', value: 19 },
  263. { name: '20:00', value: 20 },
  264. { name: '21:00', value: 21 },
  265. { name: '22:00', value: 22 },
  266. { name: '23:00', value: 23 },
  267. { name: '24:00', value: 24 }
  268. ],
  269. columns2: [
  270. { name: '周一', value: 1 },
  271. { name: '周二', value: 2 },
  272. { name: '周三', value: 3 },
  273. { name: '周四', value: 4 },
  274. { name: '周五', value: 5 },
  275. { name: '周六', value: 6 },
  276. { name: '周日', value: 7 }
  277. ],
  278. columns3: [
  279. { name: '1号', value: 1 },
  280. { name: '2号', value: 2 },
  281. { name: '3号', value: 3 },
  282. { name: '4号', value: 4 },
  283. { name: '5号', value: 5 },
  284. { name: '6号', value: 6 },
  285. { name: '7号', value: 7 },
  286. { name: '8号', value: 8 },
  287. { name: '9号', value: 9 },
  288. { name: '10号', value: 10 },
  289. { name: '11号', value: 11 },
  290. { name: '12号', value: 12 },
  291. { name: '13号', value: 13 },
  292. { name: '14号', value: 14 },
  293. { name: '15号', value: 15 },
  294. { name: '16号', value: 16 },
  295. { name: '17号', value: 17 },
  296. { name: '18号', value: 18 },
  297. { name: '19号', value: 19 },
  298. { name: '20号', value: 20 },
  299. { name: '21号', value: 21 },
  300. { name: '22号', value: 22 },
  301. { name: '23号', value: 23 },
  302. { name: '24号', value: 24 },
  303. { name: '25号', value: 25 },
  304. { name: '26号', value: 26 },
  305. { name: '27号', value: 27 },
  306. { name: '28号', value: 28 },
  307. { name: '29号', value: 29 },
  308. { name: '30号', value: 30 },
  309. { name: '31号', value: 31 }
  310. ],
  311. // 部门可见
  312. deptVisibleName: null,
  313. dept_not_select: [],
  314. dept_employee_list: [],
  315. dept_selected: { dept: [], employee: [] },
  316. show_employee_selector: false
  317. };
  318. },
  319. components: { EmployeeSelector, upload },
  320. watch: {
  321. 'formData.task_cycle'(val) {
  322. if (val) {
  323. this.formData.task_expire_day = 1;
  324. } else {
  325. this.formData.expire_time = moment().format('YYYY-MM-DD 18:00');
  326. }
  327. },
  328. 'formData.pt_id'(val) {
  329. console.log(val)
  330. let item = this.formData
  331. item.tree_echo = []
  332. this.max = 0;
  333. this.min = 0;
  334. this.treeName = ''
  335. item.task_remark = '';
  336. item.base_point = '0';
  337. item.range_type = 0;
  338. }
  339. },
  340. mounted() {
  341. this.point_types = JSON.parse(localStorage.getItem('types'));
  342. this.getDepartment();
  343. },
  344. methods: {
  345. handleFilesSuccess(response, file, fileList) {
  346. this.fileFun(file, fileList)
  347. },
  348. onFilePreView(file) {
  349. if (file.response) {
  350. window.open(file.response.url, '_blank');
  351. }
  352. },
  353. onFileRemove(file, fileList) {
  354. this.fileFun(file, fileList)
  355. },
  356. fileFun(file, fileList){
  357. this.fileList = fileList;
  358. this.formData.file_list = []
  359. fileList.forEach((item, index) => {
  360. this.formData.file_list.push(item.url);
  361. });
  362. },
  363. // 附件上传
  364. beforeUpload(file) {
  365. const isJPG = /^image\/(jpeg|png|jpg)$/.test(file.type);
  366. const isLt2M = file.size / 1024 / 1024 < 1;
  367. if (!isJPG) {
  368. this.$message.error('上传头像图片只能是 JPG 格式!');
  369. }
  370. if (!isLt2M) {
  371. this.$message.error('上传头像图片大小不能超过 2MB!');
  372. }
  373. return isJPG && isLt2M;
  374. },
  375. trees_PtId(id) {
  376. return id == 2 ? 'A分' : 'B分'
  377. },
  378. ruleItemChange(val){
  379. let item = this.formData
  380. if(val.length>0){
  381. let data = this.$refs.ruleItem.getCheckedNodes()[0].data;//当前选中的节点数据
  382. console.log(this.$refs.ruleItem.getCheckedNodes()[0].data)
  383. item.task_remark = data.name;
  384. this.max = data.max_point * 1;
  385. this.min = data.min_point * 1;
  386. this.treeName = data.name;
  387. item.base_point = data.min_point;
  388. item.range_type = data.range_type;
  389. item.rule_id = data.pid;
  390. item.item_id = data.id;
  391. }else{
  392. item.task_remark = '';
  393. this.treeName = '';
  394. this.max = 0;
  395. this.min = 0;
  396. item.base_point = '0';
  397. item.range_type = 0;
  398. item.rule_id = 0;
  399. item.item_id = 0;
  400. }
  401. },
  402. handleChange(val) {
  403. console.log(this.dept_name);
  404. let data = [];
  405. for (let i in val) {
  406. data.push(val[i][val[i].length - 1]);
  407. }
  408. this.formData.dept_ids = data;
  409. },
  410. submitMembers(name) {
  411. this.$refs[name].confirm(); //调用组件的confirm();
  412. },
  413. //关闭
  414. handleClose(done) {
  415. done();
  416. },
  417. sub(formName) {
  418. this.$refs[formName].validate(valid => {
  419. if (valid) {
  420. this.saveFun(formName);
  421. }
  422. });
  423. },
  424. resetForm(formName) {
  425. this.$emit('update:dialogVisible', false);
  426. this.$refs[formName].resetFields();
  427. this.executorName = '';
  428. this.reviewerName = '';
  429. this.deptVisibleName = '';
  430. this.treeName = '';
  431. this.fileList = [];
  432. this.dept_name = [];
  433. this.formData.dept_ids=[];
  434. this.formData.range_type=0;
  435. this.formData.rule_id=0;
  436. this.formData.item_id=0;
  437. this.formData.tree_echo = [],
  438. this.reviewer_selected = { dept: [], employee: [] };
  439. this.dept_selected = { dept: [], employee: [] };
  440. console.log(this.formData)
  441. },
  442. ahead_timeout(item,arr,codes,code){
  443. if(item){
  444. if(arr){
  445. if(Number(item) > Number(arr)){
  446. this.$message.warning(code +'上限不能小于每日'+ code)
  447. return true
  448. }
  449. }else{
  450. this.$message.warning( codes + '不为0时,'+ code +'上限不能为空')
  451. return true
  452. }
  453. }
  454. },
  455. deletedata(data,arr){
  456. data[arr] && data[arr] != 0 ? '' : delete data[arr]
  457. },
  458. // 提交
  459. saveFun(formName) {
  460. // 没有选择重复任务的时候
  461. // /api/integral/task/publish
  462. // 选择重复任务之后
  463. // /api/integral/schedule/publish/task
  464. let self = this;
  465. let data = JSON.parse(JSON.stringify(self.formData));
  466. if (data.task_cycle == 0) {
  467. delete data.task_cycle;
  468. delete data.task_expire_day;
  469. delete data.targets;
  470. data.task_remark ? '' : delete data.task_remark;
  471. } else {
  472. delete data.expire_time;
  473. data.task_remark ? '' : delete data.task_remark;
  474. }
  475. if(!data.ahead_award_point && data.ahead_award_point_limit){
  476. this.$message.warning('奖分上限不为0时每日奖分不能为空')
  477. return
  478. }else if(data.ahead_award_point && !data.ahead_award_point_limit){
  479. this.$message.warning('每日奖分不为0时奖分上限不能为空')
  480. return
  481. }
  482. if(!data.timeout_deduction_point && data.timeout_deduction_point_limit){
  483. this.$message.warning('扣分上限不为0时每日扣分不能为空')
  484. return
  485. }else if(data.timeout_deduction_point && !data.timeout_deduction_point_limit){
  486. this.$message.warning('每日扣分不为0时扣分上限不能为空')
  487. return
  488. }
  489. if(this.ahead_timeout(data.ahead_award_point,data.ahead_award_point_limit,'提前奖分','奖分')) return
  490. if(this.ahead_timeout(data.timeout_deduction_point,data.timeout_deduction_point_limit,'逾期扣分','扣分')) return
  491. if(!this.$getIsCreator('creator')||this.$getUserData().point_config.point_limit.length!=0){
  492. let entry_limit = Number(this.$getUserData().point_config.point_limit[1].point)
  493. if(entry_limit > 0){
  494. if(data.ahead_award_point > entry_limit || data.timeout_deduction_point > entry_limit ){
  495. this.$message.warning('每日奖扣分 不能超过您的奖扣分权限(您的奖扣分权限:' + entry_limit + '分)')
  496. return
  497. }
  498. if(data.ahead_award_point_limit > entry_limit*10 || data.timeout_deduction_point_limit > entry_limit*10 ){
  499. this.$message.warning('奖扣分上限不能超过' + entry_limit*10 + '分(您的奖扣分权限' + entry_limit + '分*10)')
  500. return
  501. }
  502. }
  503. }
  504. let add = ['ahead_award_point', 'ahead_award_point_limit', 'timeout_deduction_point', 'timeout_deduction_point_limit']
  505. add.forEach(item =>{
  506. this.deletedata(data,item)
  507. })
  508. this.forTheTaskLoading = true;
  509. self.$axios('post', self.formData.task_cycle == 0 ? '/api/integral/task/publish' : '/api/integral/schedule/publish/task', data)
  510. .then(res => {
  511. if (res.data.code == 1) {
  512. this.$parent.get_list();
  513. this.resetForm('formData');
  514. self.$message.success(res.data.msg);
  515. // self.$emit('update:dialogVisible', false);
  516. // self.$refs[formName].resetFields();
  517. // self.formData.dept_ids=[];
  518. // self.executorName = '';
  519. // self.reviewerName = '';
  520. // this.dept_name = [];
  521. // this.reviewer_selected = { dept: [], employee: [] };
  522. // this.dept_selected = { dept: [], employee: [] };
  523. // this.deptVisibleName = '';
  524. } else {
  525. self.$message.error(res.data.msg);
  526. }
  527. })
  528. .finally(() => {
  529. setTimeout(() => {
  530. this.forTheTaskLoading = false;
  531. }, 300);
  532. });
  533. },
  534. // // 执行者
  535. // approval_confirm(data){
  536. // this.approval_selected = {dept: [],employee:[]}
  537. // this.formData.targets = []
  538. // this.executorName = ''
  539. // if (data.employee !== null && data.employee.length != 0) {
  540. // this.approval_selected = data
  541. // data.employee.forEach(element => {
  542. // this.formData.targets.push(element.id)
  543. // this.executorName += (element.name+',')
  544. // });
  545. // }
  546. // },
  547. // 执行者 end
  548. // 审核人
  549. reviewer_confirm(data) {
  550. this.reviewer_selected = { dept: [], employee: [] };
  551. this.formData.reviewer_id = '';
  552. this.reviewerName = '';
  553. if (data.employee !== null && data.employee.length != 0) {
  554. this.reviewer_selected = data;
  555. this.formData.reviewer_id = data.employee[0].id;
  556. this.reviewerName = data.employee[0].name;
  557. }
  558. this.show_reviewer_selector = false;
  559. },
  560. // 审核人 end
  561. // 部门可见
  562. dept_confirm(data) {
  563. this.dept_selected = { dept: [], employee: [] };
  564. this.formData.dept_ids = [];
  565. this.deptVisibleName = '';
  566. if (data.dept !== null && data.dept.length != 0) {
  567. this.dept_selected = data;
  568. data.dept.forEach(element => {
  569. this.formData.dept_ids.push(element.dept_id);
  570. this.deptVisibleName += element.dept_name + ',';
  571. });
  572. }
  573. this.show_employee_selector = false;
  574. },
  575. // 部门可见 end
  576. closeDialog() {
  577. this.resetForm('formData');
  578. // this.$emit('update:dialogVisible', false)
  579. },
  580. //获取部门
  581. getDepartment() {
  582. this.$axios('get', '/api/department/tree').then(res => {
  583. this.dept_tree = this.getTreeData(res.data.data.list);
  584. });
  585. },
  586. // 递归判断列表,把最后的children设为undefined
  587. getTreeData(data) {
  588. for (var i = 0; i < data.length; i++) {
  589. if (data[i]._child.length < 1) {
  590. // children若为空数组,则将children设为undefined
  591. data[i]._child = undefined;
  592. } else {
  593. // children若不为空数组,则继续 递归调用 本方法
  594. this.getTreeData(data[i]._child);
  595. }
  596. }
  597. return data;
  598. }
  599. }
  600. };
  601. </script>
  602. <style lang="scss">
  603. // .el-cascader-menu .el-cascader-menu__wrap .el-scrollbar__view li.el-cascader-node {
  604. // height: auto;
  605. // max-width: 500px;
  606. // .el-cascader-node__label {
  607. // white-space: initial;
  608. // overflow: initial;
  609. // text-overflow: initial;
  610. // }
  611. // }
  612. </style>