levelAddOrEdit.vue 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. <!--
  2. * @Author: zwy
  3. * @Date: 2021-02-01 11:46:07
  4. * @LastEditors: zwy
  5. * @LastEditTime: 2021-05-19 16:46:42
  6. * @Descripttion: 考评等级设置-编辑弹框
  7. -->
  8. <template>
  9. <div class="levelModal">
  10. <div class="tree-style" v-if="params.todo == 'add'">
  11. <el-tree
  12. :data="organList"
  13. ref="tree"
  14. node-key="id"
  15. :highlight-current="true"
  16. :props="defaultProps"
  17. :expand-on-click-node="false"
  18. default-expand-all
  19. :check-strictly="true"
  20. @check="changeOrgan"
  21. :show-checkbox="true"
  22. >
  23. <span class="ellipsis" slot-scope="{ node }">
  24. <span :title="node.label">{{ node.label }}</span>
  25. </span>
  26. </el-tree>
  27. </div>
  28. <zz-form class="form" :cols="formCols" :data="formData" :rules="formRules" labelWidth="100" ref="form">
  29. <template slot="evaluationGrade">
  30. <el-select v-model="formData.evaluationGrade" placeholder="请选择绩效等级">
  31. <el-option v-for="(item, index) in levelList" :key="index" :label="item.dictValue" :value="+item.dictCode">{{
  32. item.dictValue
  33. }}</el-option>
  34. </el-select>
  35. </template>
  36. <template slot="type">
  37. <div style="display: flex">
  38. <el-select v-model="formData.type" placeholder="请选择">
  39. <el-option
  40. v-for="(item, index) in gradeList"
  41. :key="index"
  42. :value="+item.dictCode"
  43. :label="item.dictValue"
  44. ></el-option>
  45. </el-select>
  46. <el-input v-model="formData.valueOne" v-number-input></el-input>
  47. <span style="margin:0 5px;">-</span>
  48. <el-input v-model="formData.valueTwo" :disabled='formData.type!==1' v-number-input></el-input>
  49. </div>
  50. </template>
  51. <template slot="remarks">
  52. <el-input class="textarea" type="textarea" maxlength="100" v-model="formData.remarks"></el-input>
  53. </template>
  54. </zz-form>
  55. </div>
  56. </template>
  57. <script>
  58. export default {
  59. props: ['params'],
  60. data() {
  61. return {
  62. organList: [],
  63. defaultProps: {
  64. children: 'orgs',
  65. label: 'orgName'
  66. },
  67. formData: {
  68. id: '',
  69. companyOrgIds: [], //所属公司
  70. evaluationGrade: '', //绩效等级
  71. type: '', //类型
  72. valueOne: '', //分值1
  73. valueTwo: '', //分值2
  74. remarks: '' //备注
  75. },
  76. taskTypeList: [],
  77. levelList: [],
  78. gradeList: [],
  79. formCols: [
  80. [
  81. {
  82. label: '绩效等级',
  83. slot: 'evaluationGrade'
  84. },
  85. {
  86. label: '分值',
  87. slot: 'type'
  88. },
  89. {
  90. label: '备注',
  91. slot: 'remarks'
  92. }
  93. ]
  94. ],
  95. formRules: {
  96. evaluationGrade: [this.$valid.selectRequired('绩效等级')],
  97. type:[this.$valid.selectRequired('分值')],
  98. }
  99. };
  100. },
  101. watch:{
  102. 'formData.type'(val){
  103. if(val!==1){
  104. this.formData.valueTwo="";
  105. }
  106. }
  107. },
  108. methods: {
  109. //获取绩效等级
  110. getLevelList() {
  111. this.$api.common.getDictionaryData('SC_EVALUATION_GRADE').then(({ msg, status, data }) => {
  112. if (status == 0) {
  113. this.levelList = data;
  114. }
  115. });
  116. },
  117. //获取分值符号
  118. getGradeType() {
  119. this.$api.common.getDictionaryData('SC_EVALUATION_GRADE_TYPE').then(({ msg, status, data }) => {
  120. if (status == 0) {
  121. this.gradeList = data;
  122. }
  123. });
  124. },
  125. changeOrgan() {
  126. var data = this.$refs.tree.getCheckedNodes();
  127. let arr = [];
  128. data.map((item, index) => {
  129. arr.push(item.id);
  130. });
  131. this.formData.companyOrgIds = arr;
  132. },
  133. getOrgTreeList() {
  134. this.$http.postForm('/sc-user-center/org/getOrgUserTree', { orgType: 'company', id: '000' }).then(({ status, data, msg }) => {
  135. if (status === 0 && data) {
  136. this.organList = data;
  137. }
  138. });
  139. },
  140. submit() {
  141. new Promise((resolve) => {
  142. if(this.formData.type!==1&&this.formData.valueOne==""){
  143. this.$message.error("请输入分值");
  144. return;
  145. }else if(this.formData.type==1&&(this.formData.valueOne==""||this.formData.valueTwo=="")){
  146. this.$message.error("请输入分值");
  147. return
  148. }else if(this.formData.type==1&&this.formData.valueOne>this.formData.valueTwo){
  149. this.$message.error("前一个分值必须小于等于后一个分值");
  150. return
  151. }else if(this.formData.valueOne<0||this.formData.valueTwo<0){
  152. this.$message.error("分值不能为负数");
  153. return
  154. }
  155. this.$refs.form.validate(resolve);
  156. }).then(() => {
  157. var posturl = '',
  158. method = 'post';
  159. if (this.params.todo === 'edit') {
  160. posturl = '/sc-community/evaluation/grade/edit';
  161. delete this.formData.companyOrgIds;
  162. } else {
  163. posturl = '/sc-community/evaluation/grade/add';
  164. if (!this.formData.companyOrgIds.length) {
  165. this.$message.error('请勾选所属公司');
  166. loading.close();
  167. return;
  168. }
  169. }
  170. var loading = this.$loading();
  171. this.$http[method](posturl, this.formData)
  172. .then(({ status, data, msg }) => {
  173. loading.close();
  174. if (0 == status) {
  175. this.$message.success(msg);
  176. this.params.callback && this.params.callback();
  177. this.$emit('close');
  178. } else {
  179. this.$message.error(msg);
  180. }
  181. })
  182. .catch((err) => {
  183. loading.close();
  184. });
  185. });
  186. }
  187. },
  188. created() {
  189. this.getLevelList();
  190. this.getGradeType();
  191. this.getOrgTreeList();
  192. if (this.params.todo == 'edit') {
  193. this.__setValue('formData');
  194. }
  195. }
  196. };
  197. </script>
  198. <style lang="scss" scoped>
  199. .levelModal {
  200. display: flex;
  201. min-height: 100%;
  202. .tree-style {
  203. width: 340px;
  204. border: 1px solid #d8d8d8;
  205. border-radius: 4px;
  206. overflow: auto;
  207. padding: 20px;
  208. }
  209. .form {
  210. width: 100%;
  211. margin-left: 20px;
  212. border: 1px solid #d8d8d8;
  213. padding: 20px;
  214. .textarea {
  215. /deep/.el-textarea__inner {
  216. width: 100%;
  217. height: 200px;
  218. }
  219. }
  220. }
  221. }
  222. </style>