drawing-page.vue 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. <template>
  2. <div class="mainContentBox">
  3. <avue-form ref="formRef" v-model="form" :option="option" @submit="rowSave">
  4. <template #drawingPath="scope">
  5. <!-- <single-upload v-model="form.drawingPath" :generatePdf="true"/>-->
  6. <FilesUpload
  7. v-model:src-list="srcList"
  8. v-model:pdf-list="pdfUrlList"
  9. v-model:file-name-list="fileNameList"
  10. :limit="10"
  11. :generate-pdf="true"
  12. @finished="testFiles"
  13. />
  14. </template>
  15. </avue-form>
  16. <avue-crud
  17. ref="crudRef"
  18. v-model:search="search"
  19. v-model="form"
  20. :data="data"
  21. :option="option"
  22. v-model:page="page"
  23. @row-save="addRow"
  24. @row-update="updateRow"
  25. @row-del="deleteRow"
  26. @search-change="searchChange"
  27. @search-reset="resetChange"
  28. @size-change="dataList"
  29. @current-change="dataList"
  30. @selection-change="selectionChange"
  31. search-option="false"
  32. >
  33. <template #menu-left="{ size }">
  34. <el-button
  35. :disabled="toDeleteIds.length < 1"
  36. type="danger"
  37. icon="el-icon-delete"
  38. :size="size"
  39. @click="multipleDelete"
  40. >删除</el-button
  41. >
  42. <el-select
  43. v-model="version"
  44. placeholder="请选择BOM版本"
  45. style="width: 150px; margin-left: 15px"
  46. @change="getVersionDrawing"
  47. >
  48. <el-option
  49. v-for="item in options"
  50. :key="item"
  51. :label="item"
  52. :value="item"
  53. >
  54. </el-option>
  55. </el-select>
  56. </template>
  57. <template #menu="{ row, index, type }">
  58. <PDFView
  59. :need-to-show-pdf="true"
  60. content-type="button"
  61. :is-link="true"
  62. :show-pdf-number="1"
  63. :pdf-source="filePath + row.pdfPath"
  64. />
  65. </template>
  66. </avue-crud>
  67. </div>
  68. </template>
  69. <script setup>
  70. import { ref, getCurrentInstance } from "vue";
  71. import { useCrud } from "@/hooks/userCrud";
  72. import ButtonPermKeys from "@/common/configs/buttonPermission";
  73. import { useCommonStoreHook } from "@/store";
  74. const { isShowTable, tableType } = toRefs(useCommonStoreHook());
  75. import { useDictionaryStore } from "@/store";
  76. import { addDrawing, getDrawing } from "@/api/drawing";
  77. const { dicts } = useDictionaryStore();
  78. const filePath = import.meta.env.VITE_APP_UPLOAD_URL;
  79. const test = () => {
  80. isShowTable.value = true;
  81. tableType.value = tableType.value == 1 ? 2 : 1;
  82. };
  83. const addRow = (form2, done) => {
  84. createRow(form, done, done);
  85. pdfUrlList.value = [];
  86. srcList.value = [];
  87. fileNameList.value = [];
  88. };
  89. const testFiles = () => {
  90. form.value.pdfPathList = pdfUrlList.value;
  91. form.value.drawingPathList = srcList.value;
  92. form.value.drawingPath = srcList.value[0];
  93. form.value.fileNameList = fileNameList.value;
  94. };
  95. // 传入一个url,后面不带/
  96. const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
  97. useCrud({
  98. src: "/api/v1/base/drawing",
  99. });
  100. const { dataList } = Methords; //增删改查
  101. const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
  102. const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
  103. // checkBtnPerm(ButtonPermKeys.PLAN.BTNS.order_add) :permission="permission"
  104. // const permission = reactive({
  105. // delBtn: checkPerm(buttonPermission.PLAN.BTNS.order_del),
  106. // addBtn: checkPerm(buttonPermission.PLAN.BTNS.order_add),
  107. // editBtn: checkPerm(buttonPermission.PLAN.BTNS.order_edit),
  108. // menu: true,
  109. // });
  110. const formRef = ref(null);
  111. const version = ref({
  112. value: "0",
  113. label: "请选择图纸版本",
  114. });
  115. const options = ref([]);
  116. const fileUrl = ref(""); //单文件
  117. const pdfUrlList = ref([]);
  118. const srcList = ref([]);
  119. const fileNameList = ref([]);
  120. import dictDataUtil from "@/common/configs/dictDataUtil";
  121. const getVersionDrawing = () => {
  122. if (version.value.value != "0") {
  123. search.value.materialCode = props.materialCode;
  124. search.value.drawingVersion = version.value;
  125. dataList();
  126. }
  127. };
  128. function rowSave(form, done) {
  129. form.associationCode = props.materialCode;
  130. form.associationName = props.materialName;
  131. console.info("formRef.value", done);
  132. addDrawing(form).then((data) => {
  133. if (data.code === "200") {
  134. ElMessage({
  135. message: data.msg,
  136. type: "success",
  137. });
  138. formRef.value.resetForm();
  139. dataList();
  140. } else {
  141. ElMessage({
  142. message: data.msg,
  143. type: "error",
  144. });
  145. }
  146. });
  147. done();
  148. }
  149. onMounted(() => {
  150. // console.log("crudRef", crudRef)
  151. getDrawing(props.materialCode).then((data) => {
  152. if (data.code === "200") {
  153. options.value = Array.from(data.data);
  154. } else {
  155. ElMessage({
  156. message: data.msg,
  157. type: "error",
  158. });
  159. }
  160. });
  161. search.value.materialCode = props.materialCode;
  162. dataList();
  163. });
  164. const ctableRef = ref(null);
  165. // 设置表格列或者其他自定义的option
  166. option.value = Object.assign(option.value, {
  167. selection: true,
  168. column: [
  169. {
  170. label: "物料编号",
  171. prop: "associationCode",
  172. hide: true,
  173. display: false,
  174. },
  175. {
  176. label: "物料编号",
  177. prop: "associationName",
  178. hide: true,
  179. display: false,
  180. },
  181. {
  182. label: "图纸编号",
  183. prop: "drawingCode",
  184. rules: [
  185. {
  186. required: true,
  187. message: "图纸编号不能为空",
  188. trigger: "blur",
  189. },
  190. ],
  191. },
  192. {
  193. label: "图纸标题",
  194. prop: "drawingTitle",
  195. rules: [
  196. {
  197. required: true,
  198. message: "图纸名称不能为空",
  199. trigger: "blur",
  200. },
  201. ],
  202. },
  203. {
  204. label: "图纸类型",
  205. prop: "drawingDictValue",
  206. filterable: true,
  207. type: "select",
  208. width: 100,
  209. overHidden: true,
  210. dicUrl: dictDataUtil.request_url + "drawing_type",
  211. props: { label: "dictLabel", value: "dictValue" },
  212. rules: [
  213. {
  214. required: true,
  215. message: "请选择物料属性",
  216. trigger: "blur",
  217. },
  218. ],
  219. },
  220. {
  221. label: "文件名称",
  222. prop: "fileName",
  223. span: 24,
  224. width: 120,
  225. overHidden: true,
  226. display: false,
  227. },
  228. {
  229. label: "文件数组",
  230. prop: "drawingPathList",
  231. span: 24,
  232. hide: true,
  233. display: false,
  234. },
  235. {
  236. label: "pdf数组",
  237. prop: "pdfPathList",
  238. span: 24,
  239. hide: true,
  240. display: false,
  241. },
  242. {
  243. label: "文件名称数组",
  244. prop: "fileNameList",
  245. span: 24,
  246. slot: true,
  247. hide: true,
  248. display: false,
  249. },
  250. {
  251. label: "版本",
  252. prop: "drawingVersion",
  253. type: "number",
  254. precision: 1,
  255. rules: [
  256. {
  257. required: true,
  258. message: "版本号不能为空",
  259. trigger: "blur",
  260. },
  261. ],
  262. click() {
  263. dialog1.visible = true;
  264. },
  265. },
  266. {
  267. label: "图纸上传",
  268. prop: "drawingPath",
  269. span: 24,
  270. slot: true,
  271. hide: true,
  272. rules: [
  273. {
  274. required: true,
  275. message: "图纸上传不能为空",
  276. trigger: "blur",
  277. },
  278. ],
  279. /*formatter: (row, column, cellValue, index) => {
  280. return `<img src="${row.drawingPath}" alt="${row.drawingPath}" width="50" height="50">`;
  281. }
  282. */
  283. },
  284. ],
  285. delBtn: false,
  286. editBtn: false,
  287. viewBtn: false,
  288. addBtn: false,
  289. });
  290. const props = defineProps({
  291. materialCode: {
  292. type: String,
  293. default: () => {
  294. return 0;
  295. },
  296. },
  297. materialName: {
  298. type: String,
  299. default: () => {
  300. return 0;
  301. },
  302. },
  303. dialog: {
  304. type: Object,
  305. default: () => {
  306. return {};
  307. },
  308. },
  309. });
  310. </script>