detail.vue 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. <template>
  2. <div>
  3. <el-card>
  4. <div slot="header" class="clearfix">
  5. <span style="font-weight:bold">评估关系</span>
  6. <div style="float: right; padding: 3px 0" type="text">
  7. <el-button size="mini" plain @click="btnBack">返回</el-button>
  8. <el-button size="mini" plain @click="btnPreviou">上一个</el-button>
  9. <el-button size="mini" plain @click="btnNext">下一个</el-button>
  10. </div>
  11. </div>
  12. <div v-loading="loading">
  13. <el-descriptions :column="6 " v-if="pageState == 'see'">
  14. <el-descriptions-item label="员工编号">{{form.staff}}</el-descriptions-item>
  15. <el-descriptions-item label="员工姓名">{{form.staffName}}</el-descriptions-item>
  16. <el-descriptions-item label="是否双向评估">{{form.isTwoEvaluation == "1" ? "是" : "否"}}</el-descriptions-item>
  17. </el-descriptions>
  18. <el-form size="mini" :model="form" inline v-if="pageState != 'see'">
  19. <el-row>
  20. <el-col :span="4">
  21. <el-form-item label="员工编号" prop="staff">
  22. <el-input size="mini" style="width: 150px" v-model="form.staff" readonly/>
  23. </el-form-item>
  24. </el-col>
  25. <el-col :span="4">
  26. <el-form-item label="员工姓名" prop="staffName">
  27. <el-input size="mini" style="width: 150px" v-model="form.staffName" readonly/>
  28. </el-form-item>
  29. </el-col>
  30. <el-col :span="4">
  31. <el-form-item label="是否双向评估" prop="aspect">
  32. <el-switch v-model="form.isTwoEvaluation" :active-value="true" :inactive-value="false"></el-switch>
  33. </el-form-item>
  34. </el-col>
  35. </el-row>
  36. </el-form>
  37. <el-table size="mini" :data="form.psnrelationItem" v-if="pageState == 'see'" :key="refreshTable">
  38. <el-table-column width="50" label="序号" align="center" type="index" />
  39. <el-table-column width="300" label="评估人编码" align="center" prop="staff" />
  40. <el-table-column width="300" label="评估人名称" align="center" prop="staffName" />
  41. <el-table-column width="300" label="评估方面" align="center" prop="aspects" v-if="form.isTwoEvaluation">
  42. <template slot-scope="scope">
  43. <dict-tag :options="dict.type.ehr_pm_aspecttype" :value="scope.row.aspects"/>
  44. </template>
  45. </el-table-column>
  46. </el-table>
  47. <div style="float:right" v-if="pageState != 'see'">
  48. <el-button type="primary" size="mini" @click="btnAddRow">新增</el-button>
  49. </div>
  50. <el-table size="mini" :data="form.psnrelationItem" v-if="pageState != 'see'" :key="refreshTable">
  51. <el-table-column width="50" label="序号" align="center" type="index" />
  52. <el-table-column width="300" label="评估人编码" align="center" prop="staff" />
  53. <el-table-column width="300" label="评估人名称" align="center" prop="staffName">
  54. <template slot-scope="scope">
  55. <el-popover-select-v2
  56. size="mini"
  57. v-model="form.psnrelationItem[scope.$index].staffName"
  58. title="员工"
  59. valueKey="name"
  60. referName="CONTACTS_PARAM"
  61. :dataMapping="{staff:'code',staffName: 'name'}"
  62. :source.sync="form.psnrelationItem[scope.$index]"
  63. @change="aa"
  64. >
  65. </el-popover-select-v2>
  66. </template>
  67. </el-table-column>
  68. <el-table-column width="300" label="评估方面" align="center" prop="aspects" v-if="form.isTwoEvaluation">
  69. <template slot-scope="scope">
  70. <el-select size="mini" v-model="scope.row.aspects" placeholder="">
  71. <el-option v-for=" dict in dict.type.ehr_pm_aspecttype" :key="dict.value" :label="dict.label" :value="dict.value">
  72. </el-option>
  73. </el-select>
  74. </template>
  75. </el-table-column>
  76. <el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width">
  77. <template slot-scope="scope">
  78. <el-button size="mini" type="text" icon="el-icon-top" @click="btnMoveUp(scope.row, scope.$index)">上移</el-button>
  79. <el-button size="mini" type="text" icon="el-icon-bottom" @click="btnMoveDown(scope.row, scope.$index)">下移</el-button>
  80. <el-button size="mini" type="text" icon="el-icon-delete" @click="btnDelete(scope.$index, scope.row)">删行</el-button>
  81. </template>
  82. </el-table-column>
  83. </el-table>
  84. </div>
  85. <div class="footer">
  86. <el-button type="primary" size="mini" @click="btnEdit" v-if="pageState == 'see'">修改</el-button>
  87. <el-button size="mini" plain @click="btnCancel" v-if="pageState != 'see'">取消</el-button>
  88. <el-button type="primary" size="mini" @click="btnSave" v-if="pageState != 'see'">保存</el-button>
  89. </div>
  90. </el-card>
  91. </div>
  92. </template>
  93. <script>
  94. import { getPsnrelation,savePsnrelation} from "@/api/business/ehr/pm/psnrelation";
  95. import ElPopoverSelectV2 from "@/components/popover-select-v2"
  96. export default {
  97. name: 'detail',
  98. dicts: ['ehr_pm_aspect','ehr_pm_role','ehr_pm_aspecttype'],
  99. props: ['enterState','rowId',"ids"],
  100. components: { ElPopoverSelectV2},
  101. model: {
  102. prop: 'isList',
  103. event: 'jugislist'
  104. },
  105. data() {
  106. return {
  107. //id
  108. id:null,
  109. //表单
  110. form:{},
  111. //删除的子表数据
  112. delItems:[],
  113. //表单校验规则
  114. formRules:{
  115. },
  116. //遮罩
  117. loading: false,
  118. //页面状态
  119. pageState: null,
  120. //刷新表格标记
  121. refreshTable:0,
  122. }
  123. },
  124. async created() {
  125. this.pageState = this.enterState;
  126. this.id = this.rowId;
  127. this.fetchPsnrelation(this.id);
  128. if(this.enterState == 'add'){
  129. }
  130. if(this.enterState == 'edit' || this.enterState == 'see') {
  131. }
  132. },
  133. watch: {
  134. },
  135. methods: {
  136. //返回
  137. btnBack(){
  138. this.$emit('jugislist', true)
  139. this.$emit('refresh')
  140. },
  141. //查询详情
  142. async fetchPsnrelation(id){
  143. this.loading = true;
  144. await getPsnrelation(id).then(res => {
  145. if (res.code === 200) {
  146. this.form = res.data;
  147. this.id = res.data.id;
  148. this.refreshTable++;
  149. }
  150. this.loading = false;
  151. })
  152. },
  153. //新增
  154. btnAddRow(){
  155. this.form.psnrelationItem.push({psnrelationId: this.id,delFlag: 0});
  156. },
  157. //上移
  158. btnMoveUp(row, index){
  159. if (index > 0) {
  160. let upData = this.form.psnrelationItem[index - 1];
  161. this.form.psnrelationItem.splice(index - 1, 1);
  162. this.form.psnrelationItem.splice(index, 0, upData);
  163. } else {
  164. this.$message({
  165. message: '已经是第一条,上移失败',
  166. type: 'warning'
  167. });
  168. }
  169. },
  170. //下移
  171. btnMoveDown(row, index){
  172. if ((index + 1) == this.form.psnrelationItem.length) {
  173. this.$message({
  174. message: '已经是最后一条,下移失败',
  175. type: 'warning'
  176. });
  177. } else {
  178. let downData = this.form.psnrelationItem[index + 1];
  179. this.form.psnrelationItem.splice(index + 1, 1);
  180. this.form.psnrelationItem.splice(index, 0, downData);
  181. }
  182. },
  183. //删除
  184. btnDelete(index){
  185. console.log('index',index);
  186. this.form.psnrelationItem[index].delFlag = '2';
  187. console.log('this.form.psnrelationItem',this.form.psnrelationItem);
  188. if(this.form.psnrelationItem[index].id){
  189. this.delItems.push(this.form.psnrelationItem[index]);
  190. }
  191. console.log('this.delItems',this.delItems);
  192. this.form.psnrelationItem.splice(index, 1);
  193. },
  194. //修改
  195. btnEdit(){
  196. this.pageState = "edit";
  197. },
  198. //取消
  199. btnCancel(){
  200. if(this.enterState == 'add'){
  201. this.btnBack();
  202. }else{
  203. this.fetchPsnrelation(this.id);
  204. this.pageState = "see";
  205. }
  206. },
  207. //保存
  208. btnSave(){
  209. this.loading = true;
  210. this.form.psnrelationItem.push(...this.delItems);
  211. this.form.psnrelationItem = this.form.psnrelationItem.filter(e => e.staff);
  212. savePsnrelation(this.form).then(response => {
  213. this.$modal.msgSuccess("保存成功");
  214. this.fetchPsnrelation(this.id);
  215. this.pageState = "see";
  216. this.loading = false;
  217. }).catch(() => {
  218. this.loading = false;
  219. });;
  220. },
  221. //上一个
  222. btnPreviou(){
  223. this.pageState = "see";
  224. let i = this.ids.indexOf(this.id) - 1;
  225. if(i > -1){
  226. let id = this.ids[i];
  227. this.fetchPsnrelation(id);
  228. }else{
  229. this.$modal.msgSuccess("已经是当前页第一条了!");
  230. }
  231. },
  232. //下一个
  233. btnNext(){
  234. this.pageState = "see";
  235. let i = this.ids.indexOf(this.id) + 1;
  236. if(i < this.ids.length){
  237. let id = this.ids[i];
  238. this.fetchPsnrelation(id);
  239. }else{
  240. this.$modal.msgSuccess("已经是当前页最后一条了!");
  241. }
  242. },
  243. aa(val,val1){
  244. console.log('val',val);
  245. console.log('val1',val1);
  246. console.log(this.form.psnrelationItem);
  247. }
  248. }
  249. }
  250. </script>
  251. <style lang="scss" scoped>
  252. .footer {
  253. z-index: 500;
  254. position: fixed;
  255. bottom: 10px;
  256. right: 10px;
  257. width: 100%;
  258. line-height: var(--footer-height);
  259. text-align: right;
  260. }
  261. .hang ::v-deep .el-form-item__content {
  262. margin-left: 0px !important;
  263. }
  264. </style>