AeServiceApplyAudit.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <template>
  2. <el-dialog
  3. center
  4. title="审核服务申请"
  5. v-model="localVisible"
  6. @close="closeDialog"
  7. >
  8. <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
  9. <el-form-item label="服务名称">
  10. <el-input v-model="form.name" disabled></el-input>
  11. </el-form-item>
  12. <el-form-item label="申请说明" prop="applyNote">
  13. <el-input
  14. disabled
  15. v-model="form.applyNote"
  16. type="textarea"
  17. :autosize="{ minRows: 4, maxRows: 8 }"
  18. ></el-input>
  19. </el-form-item>
  20. <el-form-item label="申请人">
  21. <el-input v-model="form.unitName" disabled></el-input>
  22. </el-form-item>
  23. <el-form-item label="附件信息">
  24. <el-row
  25. style="
  26. background: #f2f6fc;
  27. border-radius: 4px;
  28. border-color: #dfe4ed;
  29. padding: 10px;
  30. border: 1px solid #dcdfe6;
  31. "
  32. >
  33. <!-- closable
  34. @close="deleteFile(file.id)" -->
  35. <el-tag
  36. v-for="file in form.fileList"
  37. :key="file.id"
  38. type="info"
  39. effect="plain"
  40. >
  41. <a :href="getUrl(file.path)" :download="file.name">
  42. {{ file.name }}
  43. </a>
  44. </el-tag>
  45. </el-row>
  46. </el-form-item>
  47. <el-row>
  48. <el-col :span="12">
  49. <el-form-item label="申请时间" prop="applyTime">
  50. <el-date-picker
  51. v-model="form.applyTime"
  52. type="date"
  53. placeholder="申请时间"
  54. format="yyyy-MM-dd"
  55. :picker-options="pickerOptions"
  56. >
  57. </el-date-picker>
  58. </el-form-item>
  59. </el-col>
  60. <el-col :span="12">
  61. <el-form-item label="到期时间" prop="applyExpire">
  62. <el-date-picker
  63. v-model="form.applyExpire"
  64. type="date"
  65. placeholder="到期时间"
  66. format="yyyy-MM-dd"
  67. >
  68. </el-date-picker>
  69. </el-form-item>
  70. </el-col>
  71. </el-row>
  72. <el-form-item label="审核说明" prop="approveNote">
  73. <el-input
  74. v-model="form.approveNote"
  75. type="textarea"
  76. :autosize="{ minRows: 4, maxRows: 8 }"
  77. ></el-input>
  78. </el-form-item>
  79. <el-form-item label="审核" prop="applyState">
  80. <el-radio-group v-model="form.applyState">
  81. <el-radio label="1">通过</el-radio>
  82. <el-radio label="2">拒绝</el-radio>
  83. </el-radio-group>
  84. </el-form-item>
  85. <el-row type="flex" justify="end">
  86. <el-button size="small" type="primary" @click="onSubmit">
  87. 审核
  88. </el-button>
  89. <el-button size="small" @click="closeDialog">取消</el-button>
  90. </el-row>
  91. </el-form>
  92. </el-dialog>
  93. </template>
  94. <script setup>
  95. import { computed } from 'vue';
  96. const props = defineProps(['dialogVisible']);
  97. const emit = defineEmits(['update:dialogVisible']);
  98. // 定义计算属性中转
  99. const localVisible = computed({
  100. get: () => props.dialogVisible,
  101. set: (val) => emit('update:dialogVisible', val)
  102. });
  103. </script>
  104. <script>
  105. import {auditServiceApply, getServiceApply} from "@/api/service/apply.js";
  106. import {deleteFile} from "@/api/service/file.js";
  107. export default {
  108. props: ["dialogVisible", "id"],
  109. components: {},
  110. data() {
  111. return {
  112. form: {
  113. srvId: "",
  114. name: "",
  115. appId: "",
  116. applyTime: new Date(),
  117. applyExpire: "",
  118. approveNote: "",
  119. applyState: "",
  120. fileList: [],
  121. },
  122. rules: {
  123. srvName: [
  124. {
  125. required: true,
  126. message: "请填写信息,该属性为必填项",
  127. trigger: "blur",
  128. },
  129. ],
  130. applyTime: [
  131. {
  132. required: true,
  133. message: "请填写信息,该属性为必填项",
  134. trigger: "blur",
  135. },
  136. ],
  137. applyExpire: [
  138. {
  139. required: true,
  140. message: "请填写信息,该属性为必填项",
  141. trigger: "blur",
  142. },
  143. ],
  144. approveNote: [
  145. {
  146. required: true,
  147. message: "请填写信息,该属性为必填项",
  148. trigger: "blur",
  149. },
  150. ],
  151. applyState: [
  152. {
  153. required: true,
  154. message: "请填写信息,该属性为必填项",
  155. trigger: "blur",
  156. },
  157. ],
  158. },
  159. pickerOptions: {
  160. disabledDate: (time) => {
  161. let timeOptionRange = this.searchList.timeOptionRange;
  162. let seven = 3600 * 1000 * 24 * 6;
  163. if (timeOptionRange) {
  164. // /*选择的日期 与 当前日期 小于7天*/
  165. let current =
  166. new Date(new Date().toLocaleDateString()) -
  167. timeOptionRange.getTime();
  168. return (
  169. time.getTime() >
  170. timeOptionRange.getTime() +
  171. (current < seven ? current : seven) ||
  172. time.getTime() < timeOptionRange.getTime() - seven
  173. );
  174. } else {
  175. return time.getTime() > Date.now();
  176. }
  177. },
  178. },
  179. };
  180. },
  181. watch: {
  182. id(val) {
  183. if (val) {
  184. this.getApply(val);
  185. }
  186. },
  187. },
  188. methods: {
  189. getApply(id) {
  190. getServiceApply(id).then((r) => {
  191. this.form = r.data;
  192. if (this.form.applyState) {
  193. this.form.applyState = "1";
  194. }
  195. });
  196. },
  197. closeDialog() {
  198. this.$emit("close-dialog");
  199. },
  200. onSubmit() {
  201. this.$refs.formRef.validate((valid) => {
  202. if (valid) {
  203. auditServiceApply(this.form).then(() => {
  204. this.$message({
  205. showClose: true,
  206. message: "审核成功",
  207. type: "success",
  208. });
  209. this.closeDialog();
  210. });
  211. return true;
  212. } else {
  213. return false;
  214. }
  215. });
  216. },
  217. deleteFile(id) {
  218. deleteFile(id).then(() => {
  219. this.$modal.msgSuccess("删除附件成功");
  220. this.getApply(this.form.id);
  221. });
  222. },
  223. getUrl(path) {
  224. return process.env.VUE_APP_BASE_API + path;
  225. },
  226. },
  227. };
  228. </script>
  229. <style scoped>
  230. .box {
  231. border: 1px solid #ebeef5;
  232. border-radius: 5px;
  233. padding: 10px;
  234. }
  235. ::v-deep .el-main {
  236. padding: 0 10px;
  237. }
  238. </style>