index.vue 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" v-show="showSearch" label-width="68px">
  4. <el-form-item label="商机类型" prop="boType">
  5. <el-select
  6. v-model="queryParams.boType"
  7. @change="boTypeChange"
  8. clearable
  9. >
  10. <el-option
  11. v-for="dict in dict.type.mk_bo_type"
  12. :key="dict.value"
  13. :label="dict.label"
  14. :value="dict.value"
  15. ></el-option>
  16. </el-select>
  17. </el-form-item>
  18. <el-form-item label="模板名称" prop="name">
  19. <el-input
  20. v-model="queryParams.name"
  21. clearable
  22. @keyup.enter.native="handleQuery"
  23. />
  24. </el-form-item>
  25. <el-form-item>
  26. <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
  27. <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
  28. </el-form-item>
  29. </el-form>
  30. <!-- <el-row :gutter="10" class="mb8">
  31. <el-col :span="1.5">
  32. <el-button
  33. type="primary"
  34. plain
  35. icon="el-icon-plus"
  36. size="mini"
  37. @click="uploadAccessory"
  38. >上传</el-button>
  39. </el-col>
  40. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  41. </el-row> -->
  42. <div class="btn_grooup">
  43. <el-button
  44. type="primary"
  45. plain
  46. icon="el-icon-plus"
  47. size="mini"
  48. @click="uploadAccessory"
  49. >上传</el-button>
  50. </div>
  51. <el-table v-loading="loading" :data="filetemplateList" @selection-change="handleSelectionChange" height="700px">
  52. <el-table-column
  53. type="index"
  54. label="序号"
  55. width="55"
  56. align="center"
  57. />
  58. <el-table-column label="商机类型" align="center" prop="boType" >
  59. <template slot-scope="scope">
  60. <dict-tag :options="dict.type.mk_bo_type" :value="scope.row.boType"/>
  61. </template>
  62. </el-table-column>
  63. <el-table-column label="模板名称" align="center" prop="name" />
  64. <el-table-column label="上传者" align="center" prop="createByName" />
  65. <el-table-column label="上传时间" align="center" prop="createTime" />
  66. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  67. <template slot-scope="scope">
  68. <el-button
  69. size="small"
  70. type="danger"
  71. plain
  72. icon="el-icon-delete"
  73. @click="deleteAccessory(scope.row.id)"
  74. >删除</el-button>
  75. <el-button
  76. type="success"
  77. plain
  78. icon="el-icon-download"
  79. size="small"
  80. @click="downloadAccessory(scope.row)"
  81. >下载</el-button>
  82. </template>
  83. </el-table-column>
  84. </el-table>
  85. <pagination
  86. v-show="total>0"
  87. :total="total"
  88. :page.sync="queryParams.pageNum"
  89. :limit.sync="queryParams.pageSize"
  90. @pagination="getList"
  91. />
  92. <el-dialog
  93. :title="upload.title"
  94. :visible.sync="upload.open"
  95. width="400px"
  96. append-to-body
  97. >
  98. <el-form ref="form" :model="form" :rules="rules" label-width="80px">
  99. <el-form-item label="商机类型" prop="boType">
  100. <el-select v-model="form.boType">
  101. <el-option
  102. v-for="dict in dict.type.mk_bo_type"
  103. :key="dict.value"
  104. :label="dict.label"
  105. :value="dict.value"
  106. ></el-option>
  107. </el-select>
  108. </el-form-item>
  109. </el-form>
  110. <el-upload
  111. ref="upload"
  112. :limit="1"
  113. accept=".xlsx, .xls, .doc, .docx, .word, .wordx, .png, .jpg, .gif, .txt"
  114. :headers="upload.headers"
  115. :action="upload.url + '?boType=' + form.boType"
  116. :disabled="upload.isUploading"
  117. :on-progress="handleFileUploadProgress"
  118. :on-success="handleFileSuccess"
  119. :auto-upload="false"
  120. drag
  121. >
  122. <i class="el-icon-upload"></i>
  123. <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
  124. </el-upload>
  125. <div slot="footer">
  126. <el-button type="primary" @click="submitFileForm">确 定</el-button>
  127. <el-button @click="upload.open = false">取 消</el-button>
  128. </div>
  129. </el-dialog>
  130. </div>
  131. </template>
  132. <script>
  133. import { listFiletemplate,delFiletemplate } from "@/api/business/spd/bo/filetemplate";
  134. import { getToken } from "@/utils/auth";
  135. import axios from "axios";
  136. export default {
  137. name: "Filetemplate",
  138. dicts: ['mk_bo_type'],
  139. data() {
  140. return {
  141. // 遮罩层
  142. loading: true,
  143. // 显示搜索条件
  144. showSearch: true,
  145. // 总条数
  146. total: 0,
  147. // 文件模板表格数据
  148. filetemplateList: [],
  149. // 弹出层标题
  150. title: "",
  151. // 是否显示弹出层
  152. open: false,
  153. // 查询参数
  154. queryParams: {
  155. pageNum: 1,
  156. pageSize: 10,
  157. boType: null,
  158. url: null,
  159. name: null,
  160. },
  161. // 表单参数
  162. form: {},
  163. // 表单校验
  164. rules: {
  165. },
  166. // 上传参数
  167. upload: {
  168. // 是否显示弹出层
  169. open: false,
  170. // 弹出层标题
  171. title: "",
  172. // 是否禁用上传
  173. isUploading: false,
  174. // 上传类型
  175. flag: "",
  176. // 设置上传的请求头部
  177. headers: { Authorization: "Bearer " + getToken() },
  178. // 上传的地址
  179. url: process.env.VUE_APP_BASE_API + "/mk/bo/filetemplate/upload",
  180. },
  181. rules:{
  182. boType :[{required: true, message: '请选择商机类型', trigger: 'blur'}],
  183. },
  184. };
  185. },
  186. created() {
  187. this.getList();
  188. },
  189. methods: {
  190. /** 搜索按钮操作 */
  191. handleQuery() {
  192. this.queryParams.pageNum = 1;
  193. this.getList();
  194. },
  195. /** 查询文件模板列表 */
  196. getList() {
  197. this.loading = true;
  198. listFiletemplate(this.queryParams).then(response => {
  199. this.filetemplateList = response.rows;
  200. this.total = response.total;
  201. this.loading = false;
  202. });
  203. },
  204. //上传附件公共方法
  205. uploadAccessory() {
  206. this.upload.open = true;
  207. },
  208. // 提交上传文件
  209. submitFileForm() {
  210. this.$refs["form"].validate((valid) => {
  211. if (valid) {
  212. this.$refs.upload.submit();
  213. }
  214. });
  215. },
  216. // 文件上传中处理
  217. handleFileUploadProgress(event, file, fileList) {
  218. this.upload.isUploading = true;
  219. },
  220. // 文件上传成功处理
  221. handleFileSuccess(response, file, fileList) {
  222. this.upload.open = false;
  223. this.upload.isUploading = false;
  224. this.$refs.upload.clearFiles();
  225. this.$alert(
  226. "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
  227. response.msg +
  228. "</div>",
  229. "上传结果",
  230. { dangerouslyUseHTMLString: true }
  231. );
  232. this.getList();
  233. },
  234. //下载附件
  235. downloadAccessory(row) {
  236. var resUrl = "https://sy.derom.com/document-center/fastdfs/download?id=" + row.url;
  237. axios
  238. .create({
  239. timeout: 3000,
  240. responseType: "blob", // 响应类型, 将响应数据转换为二进制数据
  241. headers: {},
  242. })
  243. .get(resUrl)
  244. .then((res) => {
  245. console.log(res);
  246. // 地址转换
  247. let url = window.URL.createObjectURL(res.data);
  248. const a = document.createElement("a");
  249. a.setAttribute("href", url);
  250. a.setAttribute("download", row.name);
  251. document.body.append(a);
  252. a.click();
  253. document.body.removeChild(a);
  254. });
  255. },
  256. //删除附件
  257. deleteAccessory(id) {
  258. this.$modal
  259. .confirm("是否确认删除?")
  260. .then(function () {})
  261. .then(() => {
  262. delFiletemplate(id).then((res) => {
  263. if (res.code == 200) {
  264. this.$modal.msgSuccess("删除成功");
  265. this.getList();
  266. } else {
  267. this.$modal.msgSuccess("删除失败");
  268. }
  269. });
  270. })
  271. .catch(() => {});
  272. },
  273. }
  274. };
  275. </script>
  276. <style lang="scss" scoped>
  277. .btn_grooup {
  278. margin-bottom: 10px;
  279. display: flex;
  280. justify-content: flex-end;
  281. }
  282. </style>