childDialog.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <template>
  2. <div class="dialog">
  3. <el-dialog
  4. v-model="dialogVisible"
  5. :title="dialogTitle"
  6. width="580px"
  7. @close="closeDialog()"
  8. >
  9. <el-form
  10. ref="formRef"
  11. :model="formData"
  12. :rules="rules"
  13. label-width="120px"
  14. >
  15. <el-row>
  16. <el-col :span="24">
  17. <el-form-item prop="templateName" label="模板名称">
  18. <el-input v-model="formData.templateName" />
  19. </el-form-item>
  20. <el-form-item prop="viewThumbPath" label="预览图上传">
  21. <div>
  22. <el-upload
  23. ref="uploadThumb"
  24. :multiple="false"
  25. class="avatar-uploader"
  26. action="apis100/upload/bucketFile"
  27. :headers="headers"
  28. :show-file-list="false"
  29. accept=".jpg,.png"
  30. :on-exceed="handleExceedThumb"
  31. :before-upload="beforeUploadThumb"
  32. :on-success="successFileThumb"
  33. :data="uploadParams"
  34. >
  35. <template #trigger>
  36. <el-button type="primary">
  37. <i-ep-Picture />&nbsp;&nbsp;上传预览图
  38. </el-button>
  39. <span style="margin-left: 10px">
  40. <img
  41. v-if="formData.viewThumbPath"
  42. height="60px"
  43. style="
  44. cursor: pointer;
  45. border: 1px solid #ddd;
  46. height: 60px;
  47. max-width: 500px;
  48. "
  49. :src="formData.viewThumbPath"
  50. />
  51. </span>
  52. </template>
  53. </el-upload>
  54. </div>
  55. </el-form-item>
  56. </el-col>
  57. </el-row>
  58. </el-form>
  59. <template #footer>
  60. <div class="dialog-footer">
  61. <el-button v-throttle type="primary" @click="handleSubmit"
  62. >确 定
  63. </el-button>
  64. <el-button @click="closeDialog()">取 消</el-button>
  65. </div>
  66. </template>
  67. </el-dialog>
  68. </div>
  69. </template>
  70. <script setup lang="ts">
  71. import {
  72. FormInstance,
  73. genFileId,
  74. UploadInstance,
  75. UploadProps,
  76. UploadRawFile,
  77. UploadUserFile,
  78. } from "element-plus";
  79. import { getToken } from "@/utils/js-cookie";
  80. import {addDesignFont, getDesignTemplateImposition, updateDesignTemplateThumb} from "@/api/design";
  81. const uploadThumb = ref<UploadInstance>();
  82. const headers = ref({
  83. "X-ERP-User-From": 100,
  84. "X-ERP-DataSource-Id": getToken("dataBaseAlias"),
  85. "X-ERP-Supplier-Code": getToken("shardingKey"),
  86. "X-Token": getToken("shardingKey"),
  87. });
  88. const uploadParams = reactive({
  89. srcfilename: "",
  90. chunks: 1,
  91. bucketName: "webImage",
  92. });
  93. const handleExceedThumb: UploadProps["onExceed"] = (files) => {
  94. uploadThumb.value!.clearFiles();
  95. const file = files[0] as UploadRawFile;
  96. file.uid = genFileId();
  97. uploadThumb.value!.handleStart(file);
  98. };
  99. function beforeUploadThumb(file) {
  100. console.log(file);
  101. uploadParams.srcfilename = file.name;
  102. return new Promise((resolve, reject) => {
  103. if (file.size > 307200) {
  104. ElMessage.warning(
  105. "图片大小不能大于300KB,请您注意图片的长和宽,网页图片的分辨率为72"
  106. );
  107. reject();
  108. } else {
  109. resolve(file);
  110. }
  111. });
  112. }
  113. function successFileThumb(res, file, fileList) {
  114. // console.log(res);
  115. // formData.posterLocationImage = res.fileLink
  116. formData.viewThumbPath = res.fileLink;
  117. ElMessage.success("上传成功");
  118. }
  119. let dialogVisible = ref(false);
  120. let dialogTitle = ref("");
  121. const formRef = ref<FormInstance>();
  122. const emit = defineEmits(["dialogChange"]);
  123. const formData = reactive({
  124. templateName: "",
  125. viewThumbPath: "",
  126. id: 0,
  127. });
  128. const rules = reactive({
  129. templateName: [{ required: true, message: "请输入名称", trigger: "blur" }],
  130. });
  131. function handleSubmit() {
  132. formRef.value.validate((valid: any) => {
  133. if (valid) {
  134. const itemId = formData.id;
  135. if (itemId) {
  136. //修改
  137. const postData = JSON.stringify(formData);
  138. const params = {
  139. template: postData,
  140. };
  141. updateDesignTemplateThumb(params).then((response) => {
  142. dialogVisible.value = false;
  143. if (response.httpCode == 200) {
  144. emit("dialogChange");
  145. ElMessage.success("操作成功");
  146. }
  147. });
  148. }
  149. }
  150. });
  151. }
  152. function getItemData(item) {
  153. const data = {
  154. id: item,
  155. };
  156. getDesignTemplateImposition(data).then((response) => {
  157. if (response.httpCode == 200) {
  158. const data = response.data;
  159. formData.id = data.id;
  160. formData.viewThumbPath = data.viewThumbPath;
  161. formData.templateName = data.templateName;
  162. }
  163. });
  164. }
  165. /** 重置表单 */
  166. function resetForm() {
  167. formRef.value.resetFields();
  168. formData.id = undefined;
  169. }
  170. /**关闭弹窗 */
  171. function closeDialog() {
  172. dialogVisible.value = false;
  173. formRef.value.resetFields();
  174. formData.id = undefined;
  175. }
  176. defineExpose({
  177. dialogVisible,
  178. dialogTitle,
  179. getItemData,
  180. resetForm,
  181. });
  182. </script>