view-skill.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. <template>
  2. <div class="mainContentBox">
  3. <avue-form
  4. ref="formRef"
  5. v-model:search="search"
  6. v-model="form"
  7. :data="data2"
  8. :option="option2"
  9. >
  10. </avue-form>
  11. <avue-crud
  12. ref="crudRef"
  13. v-model="form"
  14. :data="data"
  15. :option="option"
  16. v-model:page="page"
  17. @row-save="createRow"
  18. @row-update="updateRow"
  19. @row-del="deleteRow"
  20. >
  21. </avue-crud>
  22. <CommonTable
  23. ref="ctableRef"
  24. tableTitle="员工选择"
  25. tableType="USERS"
  26. @selected-sure="onSelectedFinish"
  27. />
  28. </div>
  29. </template>
  30. <script setup>
  31. import { ref, getCurrentInstance } from "vue";
  32. import { useCrud } from "@/hooks/userCrud";
  33. import ButtonPermKeys from "@/common/configs/buttonPermission";
  34. import { useCommonStoreHook, useDictionaryStoreHook } from "@/store";
  35. import dictDataUtil from "@/common/configs/dictDataUtil";
  36. import SingleUpload from "@/components/Upload/SingleUpload.vue";
  37. const { isShowTable, tableType } = toRefs(useCommonStoreHook());
  38. import {getPostSkill,addEmployeeSkill,getSkillDetail} from "@/api/system/skill";
  39. // 数据字典相关
  40. const { dicts } = useDictionaryStoreHook();
  41. const test = () => {
  42. isShowTable.value = true;
  43. tableType.value = tableType.value == 1 ? 2 : 1;
  44. };
  45. const data3=ref([]);
  46. const data2=ref(null);
  47. // 传入一个url,后面不带/
  48. const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
  49. useCrud({
  50. src: "/api/v1/sys/skillScore",
  51. });
  52. const { dataList, createRow, updateRow, deleteRow, searchChange, dataNoPageList } =
  53. Methords; //增删改查
  54. const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
  55. const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
  56. // checkBtnPerm(ButtonPermKeys.PLAN.BTNS.order_add) :permission="permission"
  57. // const permission = reactive({
  58. // delBtn: checkPerm(buttonPermission.PLAN.BTNS.order_del),
  59. // addBtn: checkPerm(buttonPermission.PLAN.BTNS.order_add),
  60. // editBtn: checkPerm(buttonPermission.PLAN.BTNS.order_edit),
  61. // menu: true,
  62. // });
  63. const option2=ref(null);
  64. const ctableRef = ref(null); //crudRef.value 获取avue-crud对象
  65. const router = useRouter();
  66. onMounted(() => {
  67. // console.log("crudRef", crudRef)
  68. getSkillDetail(props.skillId).then(
  69. (data)=>{
  70. form.value=data.data;
  71. }
  72. )
  73. search.value.employeeSkillId=props.skillId;
  74. dataNoPageList();
  75. });
  76. const skillChange=(row)=>{
  77. if(skillValue.value!==undefined&&skillValue.value!==null&&skillValue.value!==""){
  78. data.value[row.$index].skillDictValue=skillValue.value;
  79. }
  80. }
  81. const cancelWindow=()=>{
  82. props.viewDialog.visible=false;
  83. }
  84. const addSkill = () => {
  85. const bom=ref({
  86. $cellEdit:true,
  87. });
  88. data.value.push(bom.value);
  89. };
  90. const employeeSkill=ref({});
  91. const onHandle=()=>{
  92. console.info(form.value);
  93. if(form.value.userId===null||form.value.userId===undefined||form.value.userId===""){
  94. ElMessage({
  95. message: "未选择打分用户",
  96. type: "error",
  97. });
  98. return false;
  99. }
  100. if(form.value.postId===null||form.value.postId===undefined||form.value.postId===""){
  101. ElMessage({
  102. message: "未选择岗位",
  103. type: "error",
  104. });
  105. return false;
  106. }
  107. if(data.value.length===0){
  108. ElMessage({
  109. message: "没有要保存的打分项",
  110. type: "error",
  111. });
  112. return false;
  113. }
  114. if(data.value.length>0){
  115. for(let i=0;i<data.value.length;i++){
  116. if(data.value[i].skillDictValue===undefined||data.value[i].skillDictValue===null||data.value[i].skillDictValue===""){
  117. ElMessage({
  118. message: "第"+(i+1)+"项没有选择技能",
  119. type: "error",
  120. });
  121. return false;
  122. }
  123. if(data.value[i].score===undefined||data.value[i].score===null||data.value[i].score===""){
  124. ElMessage({
  125. message: "第"+(i+1)+"项没有打分",
  126. type: "error",
  127. });
  128. return false;
  129. }
  130. }
  131. }
  132. employeeSkill.value.userId=form.value.userId;
  133. employeeSkill.value.postId=form.value.postId;
  134. employeeSkill.value.skillList=Array.from(data.value);
  135. employeeSkill.value.id=form.value.id;
  136. addEmployeeSkill(employeeSkill.value).then(
  137. (data)=>{
  138. if(data.code==="200") {
  139. ElMessage({
  140. message: data.msg,
  141. type: "success",
  142. });
  143. props.viewDialog.visible=false;
  144. }
  145. else {
  146. ElMessage({
  147. message: data.msg,
  148. type: "error",
  149. });
  150. }
  151. }
  152. )
  153. }
  154. // 设置表格列或者其他自定义的option
  155. option2.value = {
  156. selection: true,
  157. submitBtn:false,
  158. clearAbleBtn:false,
  159. emptyBtn:false,
  160. delBtn:false,
  161. menu:false,
  162. column: [
  163. { label: "id", prop: "id", width: 130,overHidden: true,search: true ,
  164. filterable: true,
  165. width: 100,overHidden: true,
  166. disabled:false,
  167. display:false,
  168. },
  169. { label: "用户id", prop: "userId", width: 130,overHidden: true,search: true ,
  170. filterable: true,
  171. width: 100,overHidden: true,
  172. disabled:true,
  173. display:false,
  174. },
  175. { label: "用户名", prop: "userName",disabled:true, width: 140,overHidden: true,search: true },
  176. { label: "所属机构", prop: "institution", width: 130,overHidden: true,search: true ,
  177. filterable: true,
  178. width: 100,overHidden: true,
  179. disabled:true,
  180. },
  181. {
  182. label: "员工编号",
  183. prop: "employeeCode",
  184. search: true,
  185. disabled:true,
  186. },
  187. { label: "岗位", prop: "postName",
  188. search: true,
  189. filterable: true,
  190. overHidden: true,
  191. disabled:true,
  192. dicUrl:dictDataUtil.post_list_url,
  193. dicMethod:"post",
  194. change:({ value, column })=>{
  195. if(value!==undefined) {
  196. props.postId = value;
  197. skillValue.value=null;
  198. optionSkill.value=null;
  199. dataNoPageList();
  200. }
  201. },
  202. props: { label: "postName", value: "id" },
  203. },
  204. { label: "部门", prop: "deptName", overHidden: true,
  205. disabled:true, },
  206. ],
  207. };
  208. const postIdValue=ref({});
  209. const props = defineProps({
  210. viewDialog:{
  211. type:Object,
  212. default:()=>{
  213. return {};
  214. }
  215. },
  216. skillId:{
  217. type:String,
  218. default:()=>{
  219. return "0";
  220. }
  221. },
  222. postId:{
  223. type:Number,
  224. default:()=>{
  225. return "0";
  226. }
  227. }
  228. })
  229. const postIdSkill=ref({});
  230. // 设置表格列或者其他自定义的option
  231. option.value = Object.assign(option.value,{
  232. selection: false,
  233. addBtn: false,
  234. viewBtn: false,
  235. editBtn:false,
  236. saveBtn:false,
  237. delBtn:false,
  238. menu:false,
  239. cellBtn: true,
  240. column: [{
  241. label: "技能",
  242. prop: "skillDictValue",
  243. align: 'center',
  244. headerAlign: 'center',
  245. span:24,
  246. cell: true,
  247. type: 'select',
  248. dicUrl: import.meta.env.VITE_APP_BASE_API + "/api/v1/sys/postSkill/list/"+props.postId,
  249. props: {
  250. label: "skillDictLabel", // 下拉菜单显示的字段
  251. value: "skillDictValue", // 下拉菜单值的字段
  252. },
  253. },
  254. {
  255. label: "分数",
  256. prop: "score",
  257. align: 'center',
  258. headerAlign: 'center',
  259. cell: true,
  260. type:"number",
  261. precision: 2,
  262. max:100,
  263. min:0,
  264. span:24,
  265. },],
  266. });
  267. const onSelectedFinish=(selectedValue)=>{
  268. form.value.userId=selectedValue.id;
  269. form.value.userName=selectedValue.userName;
  270. form.value.deptName=selectedValue.deptName;
  271. form.value.employeeCode=selectedValue.employeeCode;
  272. form.value.institution=selectedValue.institution;
  273. }
  274. const skillValue=ref(null);
  275. const optionSkill=ref([]);
  276. const getPostSkills=()=>{
  277. if(postIdValue.value===undefined||postIdValue.value===null||postIdValue.value===""){
  278. ElMessage({
  279. message: "未选择岗位",
  280. type: "error",
  281. });
  282. return false;
  283. }
  284. getPostSkill(postIdValue.value).then(
  285. (data)=>{
  286. optionSkill.value=Array.from(data.data);
  287. }
  288. )
  289. }
  290. </script>
  291. <style type="text/css">
  292. .title-detail{
  293. width: 30%;
  294. height: 50px;
  295. line-height: 50px;
  296. margin: 25px 20px 25px 0;
  297. float: left;
  298. }
  299. .detail{
  300. margin: 0 auto;
  301. width: 100%;
  302. }
  303. .avue-crud{
  304. float: left;
  305. }
  306. .detail-footer{
  307. float: right;
  308. margin-top:15px;
  309. }
  310. .el-select__selection{
  311. width: 150px;
  312. }
  313. </style>