index.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <script>
  2. import Column from "../add/column";
  3. import useData from "../hooks/data";
  4. import useDicts from "../hooks/dicts";
  5. import useMethods from "../hooks/function";
  6. export default {
  7. name: "SeeDrawer",
  8. dicts: useDicts(Column),
  9. data() {
  10. return {
  11. column: 3,
  12. title: "明 细",
  13. ...useData(Column),
  14. };
  15. },
  16. computed: {
  17. hasPowerEdit: function () {
  18. return this.$parent.$parent.hasPowerEdit;
  19. },
  20. hasPowerSubmit: function () {
  21. return this.$parent.$parent.hasPowerSubmit;
  22. },
  23. },
  24. watch: {},
  25. methods: {
  26. //
  27. async open(prop) {
  28. this.visible = true;
  29. this.tabName = this.tabColumns[0].key;
  30. const { fetchItem } = useMethods();
  31. this.params = await fetchItem({ _this: this, prop });
  32. },
  33. //
  34. async hide() {
  35. this.visible = false;
  36. },
  37. //
  38. async useDelete(prop) {
  39. const { useDelete } = this.$parent.$parent;
  40. await useDelete(prop).then(() => this.hide());
  41. },
  42. //
  43. async useCopy(prop) {
  44. const { useCopy } = this.$parent.$parent;
  45. await useCopy(prop);
  46. },
  47. //
  48. async useEdit(prop) {
  49. const { useEdit } = this.$parent.$parent;
  50. await useEdit(prop);
  51. },
  52. //
  53. async useSubmit(prop) {
  54. const { useSubmit } = this.$parent.$parent;
  55. await useSubmit(prop).then(() => {
  56. const { id } = this.params;
  57. const { fetchItem } = useMethods();
  58. fetchItem({ _this: this, prop: id });
  59. });
  60. },
  61. },
  62. created() {},
  63. mounted() {},
  64. destroyed() {},
  65. };
  66. </script>
  67. <template>
  68. <el-drawer
  69. :size="width"
  70. :title="title"
  71. :show-close="false"
  72. :visible.sync="visible"
  73. >
  74. <template slot="title">
  75. <span>{{ title }}</span>
  76. <span>
  77. <el-tooltip
  78. class="item"
  79. effect="dark"
  80. content="删 除"
  81. placement="bottom-end"
  82. >
  83. <el-button
  84. :size="size"
  85. circle
  86. icon="el-icon-delete"
  87. @click="useDelete([params])"
  88. ></el-button>
  89. </el-tooltip>
  90. <el-tooltip
  91. class="item"
  92. effect="dark"
  93. content="复 制"
  94. placement="bottom-end"
  95. >
  96. <el-button
  97. :size="size"
  98. circle
  99. icon="el-icon-document-copy"
  100. @click="useCopy([params])"
  101. ></el-button>
  102. </el-tooltip>
  103. <el-tooltip
  104. v-if="hasPowerEdit([params])"
  105. class="item"
  106. effect="dark"
  107. content="编 辑"
  108. placement="bottom-end"
  109. >
  110. <el-button
  111. :size="size"
  112. circle
  113. icon="el-icon-edit"
  114. @click="useEdit([params])"
  115. ></el-button>
  116. </el-tooltip>
  117. <el-tooltip
  118. v-if="hasPowerSubmit([params])"
  119. class="item"
  120. effect="dark"
  121. content="审 核"
  122. placement="bottom-end"
  123. >
  124. <el-button
  125. :size="size"
  126. circle
  127. icon="el-icon-check"
  128. @click="useSubmit([params])"
  129. ></el-button>
  130. </el-tooltip>
  131. <el-button
  132. :size="size"
  133. circle
  134. type="danger"
  135. icon="el-icon-close"
  136. @click="hide"
  137. ></el-button>
  138. </span>
  139. </template>
  140. <el-descriptions :size="size" :column="column" border style="margin: 10px">
  141. <el-descriptions-item
  142. v-if="params[column.key]"
  143. v-for="(column, index) in formColumns"
  144. :key="index"
  145. :label="column.title"
  146. >
  147. <dict-tag
  148. v-if="column.inputType === 'Select'"
  149. :size="size"
  150. :value="params[column.key]"
  151. :options="dict.type[column.referName]"
  152. />
  153. <span v-else-if="column.inputType === 'Upload'">
  154. <dr-file-preview v-model="params[column.key]"></dr-file-preview>
  155. </span>
  156. <span v-else>{{ params[column.key] }}</span>
  157. </el-descriptions-item>
  158. </el-descriptions>
  159. <el-tabs v-model="tabName" :size="size" style="margin: 10px">
  160. <el-tab-pane
  161. v-for="(column, index) in tabColumns"
  162. :key="index"
  163. :name="column.key"
  164. :label="column.title"
  165. lazy
  166. >
  167. <el-table :size="size" :data="params[column.key]">
  168. <el-table-column
  169. v-for="(cColumn, cIndex) in column.tableColumns"
  170. :key="cIndex"
  171. :prop="cColumn.key"
  172. :label="cColumn.title"
  173. :width="cColumn.width || 200"
  174. show-overflow-tooltip
  175. >
  176. <template slot-scope="scope">
  177. <dict-tag
  178. v-if="cColumn.inputType === 'Select'"
  179. :size="size"
  180. :value="scope.row[cColumn.key]"
  181. :options="dict.type[cColumn.referName]"
  182. />
  183. <span v-else>{{ scope.row[cColumn.key] }}</span>
  184. </template>
  185. </el-table-column>
  186. </el-table>
  187. </el-tab-pane>
  188. </el-tabs>
  189. </el-drawer>
  190. </template>