detail.vue 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  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 ">
  14. <el-descriptions-item label="员工编号">{{form.staff}}</el-descriptions-item>
  15. <el-descriptions-item label="员工姓名">{{form.staffName}}</el-descriptions-item>
  16. </el-descriptions>
  17. <el-table size="mini" :data="form.psnrelationItem" v-if="pageState == 'see'">
  18. <el-table-column width="50" label="序号" align="center" type="index" />
  19. <el-table-column width="300" label="评估人编码" align="center" prop="staff" />
  20. <el-table-column width="300" label="评估人名称" align="center" prop="staffName" />
  21. </el-table>
  22. <div style="float:right" v-if="pageState != 'see'">
  23. <el-button type="primary" size="mini" @click="btnAddRow">新增</el-button>
  24. </div>
  25. <el-table size="mini" :data="form.psnrelationItem" v-if="pageState != 'see'">
  26. <el-table-column width="50" label="序号" align="center" type="index" />
  27. <el-table-column width="300" label="评估人编码" align="center" prop="staff" />
  28. <el-table-column width="300" label="评估人名称" align="center">
  29. <template slot-scope="scope">
  30. <el-popover-select-v2 size="mini" v-model="form.psnrelationItem[scope.$index].staffName" title="员工" valueKey="name"
  31. referName="CONTACTS_PARAM" :dataMapping="{staff:'code',staffName: 'name'}"
  32. :source.sync="form.psnrelationItem[scope.$index]">
  33. </el-popover-select-v2>
  34. </template>
  35. </el-table-column>
  36. <el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width">
  37. <template slot-scope="scope">
  38. <el-button size="mini" type="text" @click="btnMoveUp(scope.row, scope.$index)">上移</el-button>
  39. <el-button size="mini" type="text" @click="btnMoveDown(scope.row, scope.$index)">下移</el-button>
  40. <el-button size="mini" type="text" @click="btnDelete(scope.$index, scope.row)">删行</el-button>
  41. </template>
  42. </el-table-column>
  43. </el-table>
  44. </div>
  45. <div class="footer">
  46. <el-button type="primary" size="mini" @click="btnEdit" v-if="pageState == 'see'">修改</el-button>
  47. <el-button size="mini" plain @click="btnCancel" v-if="pageState != 'see'">取消</el-button>
  48. <el-button type="primary" size="mini" @click="btnSave" v-if="pageState != 'see'">保存</el-button>
  49. </div>
  50. </el-card>
  51. </div>
  52. </template>
  53. <script>
  54. import { getPsnrelation,savePsnrelation} from "@/api/business/ehr/pm/psnrelation";
  55. import ElPopoverSelectV2 from "@/components/popover-select-v2"
  56. export default {
  57. name: 'detail',
  58. dicts: ['ehr_pm_aspect','ehr_pm_role'],
  59. props: ['enterState','rowId',"ids"],
  60. components: { ElPopoverSelectV2},
  61. model: {
  62. prop: 'isList',
  63. event: 'jugislist'
  64. },
  65. data() {
  66. return {
  67. //id
  68. id:null,
  69. //表单
  70. form:{},
  71. //删除的子表数据
  72. delItems:[],
  73. //表单校验规则
  74. formRules:{
  75. },
  76. //遮罩
  77. loading: false,
  78. //页面状态
  79. pageState: null,
  80. }
  81. },
  82. async created() {
  83. this.pageState = this.enterState;
  84. this.id = this.rowId;
  85. this.fetchPsnrelation(this.id);
  86. if(this.enterState == 'add'){
  87. }
  88. if(this.enterState == 'edit' || this.enterState == 'see') {
  89. }
  90. },
  91. watch: {
  92. },
  93. methods: {
  94. //返回
  95. btnBack(){
  96. this.$emit('jugislist', true)
  97. this.$emit('refresh')
  98. },
  99. //查询详情
  100. async fetchPsnrelation(id){
  101. this.loading = true;
  102. await getPsnrelation(id).then(res => {
  103. if (res.code === 200) {
  104. this.form = res.data;
  105. this.id = res.data.id;
  106. }
  107. this.loading = false;
  108. })
  109. },
  110. //新增
  111. btnAddRow(){
  112. this.form.psnrelationItem.push({psnrelationId: this.id,delFlag: 0});
  113. },
  114. //上移
  115. btnMoveUp(row, index){
  116. if (index > 0) {
  117. let upData = this.form.psnrelationItem[index - 1];
  118. this.form.psnrelationItem.splice(index - 1, 1);
  119. this.form.psnrelationItem.splice(index, 0, upData);
  120. } else {
  121. this.$message({
  122. message: '已经是第一条,上移失败',
  123. type: 'warning'
  124. });
  125. }
  126. },
  127. //下移
  128. btnMoveDown(row, index){
  129. if ((index + 1) == this.form.psnrelationItem.length) {
  130. this.$message({
  131. message: '已经是最后一条,下移失败',
  132. type: 'warning'
  133. });
  134. } else {
  135. let downData = this.form.psnrelationItem[index + 1];
  136. this.form.psnrelationItem.splice(index + 1, 1);
  137. this.form.psnrelationItem.splice(index, 0, downData);
  138. }
  139. },
  140. //删除
  141. btnDelete(index){
  142. console.log('index',index);
  143. this.form.psnrelationItem[index].delFlag = '2';
  144. console.log('this.form.psnrelationItem',this.form.psnrelationItem);
  145. if(this.form.psnrelationItem[index].id){
  146. this.delItems.push(this.form.psnrelationItem[index]);
  147. }
  148. console.log('this.delItems',this.delItems);
  149. this.form.psnrelationItem.splice(index, 1);
  150. },
  151. //修改
  152. btnEdit(){
  153. this.pageState = "edit";
  154. },
  155. //取消
  156. btnCancel(){
  157. if(this.enterState == 'add'){
  158. this.btnBack();
  159. }else{
  160. this.fetchPsnrelation(this.id);
  161. this.pageState = "see";
  162. }
  163. },
  164. //保存
  165. btnSave(){
  166. this.form.psnrelationItem.push(...this.delItems);
  167. this.form.psnrelationItem = this.form.psnrelationItem.filter(e => e.staff);
  168. savePsnrelation(this.form).then(response => {
  169. this.$modal.msgSuccess("保存成功");
  170. this.fetchPsnrelation(this.id);
  171. this.pageState = "see";
  172. });
  173. },
  174. //上一个
  175. btnPreviou(){
  176. let i = this.ids.indexOf(this.id) - 1;
  177. if(i > -1){
  178. let id = this.ids[i];
  179. this.fetchPsnrelation(id);
  180. }else{
  181. this.$modal.msgSuccess("已经是当前页第一条了!");
  182. }
  183. },
  184. //下一个
  185. btnNext(){
  186. let i = this.ids.indexOf(this.id) + 1;
  187. if(i < this.ids.length){
  188. let id = this.ids[i];
  189. this.fetchPsnrelation(id);
  190. }else{
  191. this.$modal.msgSuccess("已经是当前页最后一条了!");
  192. }
  193. },
  194. }
  195. }
  196. </script>
  197. <style lang="scss" scoped>
  198. .footer {
  199. z-index: 500;
  200. position: fixed;
  201. bottom: 10px;
  202. right: 10px;
  203. width: 100%;
  204. line-height: var(--footer-height);
  205. text-align: right;
  206. }
  207. .hang ::v-deep .el-form-item__content {
  208. margin-left: 0px !important;
  209. }
  210. </style>