index.vue 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. <template>
  2. <div class="mainContentBox">
  3. <avue-crud
  4. ref="crudRef"
  5. v-model:search="search"
  6. v-model="form"
  7. :data="data"
  8. :option="option"
  9. v-model:page="page"
  10. @row-save="addRow"
  11. @row-update="updateRow"
  12. @row-del="deleteRow"
  13. @search-change="searchChange"
  14. @search-reset="resetChange"
  15. @size-change="dataList"
  16. @current-change="dataList"
  17. @selection-change="selectionChange"
  18. >
  19. <template #drawingPath-form="scope">
  20. <!-- <single-upload v-model="form.drawingPath" :generatePdf="true"/>-->
  21. <FilesUpload
  22. v-model:src-list="srcList"
  23. v-model:pdf-list="pdfUrlList"
  24. v-model:file-name-list="fileNameList"
  25. :limit="1000"
  26. :generate-pdf="true"
  27. @finished="testFiles"
  28. />
  29. </template>
  30. <template #enable="scope">
  31. <el-switch
  32. active-value="1"
  33. inactive-value="0"
  34. inline-prompt
  35. active-text="启用"
  36. inactive-text="禁用"
  37. v-model="scope.row.enable"
  38. @click="changeItem(scope.row)"
  39. class="ml-2"
  40. style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949"
  41. />
  42. </template>
  43. <template #menu="{ row, index, type }">
  44. <el-button link type="primary" @click="toShowPDF(row)">
  45. 预览
  46. </el-button>
  47. <el-button @click="doEdit(row, index)" text type="primary"
  48. >编辑</el-button
  49. >
  50. <el-button @click="deleteRecord(row, index, done)" text type="danger"
  51. >删除</el-button
  52. >
  53. </template>
  54. </avue-crud>
  55. <ExcelUpload ref="uploadRef" @finished="uploadFinished" />
  56. <PDFDrawerView ref="PDFDrawerViewRef"></PDFDrawerView>
  57. </div>
  58. <CommonTable
  59. ref="ctableRef"
  60. tableTitle="BOM添加"
  61. tableType="MARTERIAL"
  62. @selected-sure="onSelectedFinish"
  63. />
  64. </template>
  65. <script setup lang="ts">
  66. import { ref, getCurrentInstance } from "vue";
  67. import { useCrud } from "@/hooks/userCrud";
  68. import { useCommonStoreHook, useDictionaryStore } from "@/store";
  69. import { updateDrawaing } from "@/api/drawing";
  70. import dictDataUtil from "@/common/configs/dictDataUtil";
  71. import PDFView from "@/components/PDFView/index.vue";
  72. const { isShowTable, tableType } = toRefs(useCommonStoreHook());
  73. // 数据字典相关
  74. const { dicts } = useDictionaryStore();
  75. const fileUrl = ref(""); //单文件
  76. const pdfUrlList = ref([]);
  77. const srcList = ref([]);
  78. const fileNameList = ref([]);
  79. const testFiles = () => {
  80. form.value.pdfPathList = pdfUrlList.value;
  81. form.value.drawingPathList = srcList.value;
  82. form.value.drawingPath = srcList.value[0];
  83. form.value.fileNameList = fileNameList.value;
  84. };
  85. const filePath = import.meta.env.VITE_APP_UPLOAD_URL;
  86. const test = () => {
  87. isShowTable.value = true;
  88. tableType.value = tableType.value == 1 ? 2 : 1;
  89. };
  90. const ctableRef = ref(null);
  91. const changeItem = (row) => {
  92. updateDrawaing(row).then(() => {
  93. ElMessage.success("操作成功");
  94. dataList();
  95. });
  96. };
  97. // 传入一个url,后面不带/
  98. const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
  99. useCrud({
  100. src: "/api/v1/base/drawing",
  101. });
  102. const {
  103. dataEditList,
  104. createRow,
  105. updateRow,
  106. deleteRow,
  107. searchChange,
  108. dataList,
  109. resetChange,
  110. } = Methords; //增删改查
  111. const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
  112. const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
  113. const crudRef = ref(null); //crudRef.value 获取avue-crud对象
  114. const router = useRouter?.();
  115. onMounted?.(() => {
  116. dataEditList();
  117. });
  118. const addRow = (form2, done) => {
  119. createRow(form, done, done);
  120. pdfUrlList.value = [];
  121. srcList.value = [];
  122. fileNameList.value = [];
  123. };
  124. const onSelectedFinish = (selectedValue) => {
  125. form.value.associationCode = selectedValue.materialCode;
  126. form.value.associationName = selectedValue.materialName;
  127. form.value.materialCode = selectedValue.materialCode;
  128. };
  129. /**
  130. * 上传excel相关
  131. */
  132. const uploadRef = ref(null);
  133. const uploadFinished = () => {
  134. // 上传完成后的刷新操作
  135. page.currentPage = 1;
  136. dataEditList();
  137. };
  138. const PDFDrawerViewRef = ref(null);
  139. const toShowPDF = (row) => {
  140. let url = import.meta.env.VITE_APP_UPLOAD_URL + row.pdfPath;
  141. PDFDrawerViewRef.value && PDFDrawerViewRef.value.showPdf(url);
  142. };
  143. // 设置表格列或者其他自定义的option
  144. option.value = Object.assign(option.value, {
  145. selection: false,
  146. viewBtn: false,
  147. editBtn: false,
  148. delBtn: false,
  149. menu: true,
  150. column: [
  151. {
  152. label: "图纸编号",
  153. prop: "drawingCode",
  154. width: 150,
  155. search: true,
  156. overHidden: true,
  157. rules: [
  158. {
  159. required: true,
  160. message: "请填写图纸编号",
  161. trigger: "blur",
  162. },
  163. ],
  164. },
  165. {
  166. label: "图纸名称",
  167. prop: "drawingTitle",
  168. width: 150,
  169. overHidden: true,
  170. search: true,
  171. rules: [
  172. {
  173. required: true,
  174. message: "请填写图纸名称",
  175. trigger: "blur",
  176. },
  177. ],
  178. },
  179. {
  180. label: "物料编号",
  181. prop: "associationCode",
  182. width: 150,
  183. search: true,
  184. overHidden: true,
  185. editDisplay: false,
  186. addDisplay: false,
  187. rules: [
  188. {
  189. required: true,
  190. message: "请填写物料编号",
  191. trigger: "blur",
  192. },
  193. ],
  194. },
  195. {
  196. label: "物料编号",
  197. prop: "materialCode",
  198. width: 150,
  199. overHidden: true,
  200. editDisplay: false,
  201. hide: true,
  202. rules: [
  203. {
  204. required: true,
  205. message: "请填写物料编号",
  206. trigger: "blur",
  207. },
  208. ],
  209. click() {
  210. if (ctableRef.value) {
  211. ctableRef.value.startSelect();
  212. }
  213. },
  214. },
  215. {
  216. label: "物料名称",
  217. prop: "associationName",
  218. width: 180,
  219. search: true,
  220. overHidden: true,
  221. disabled: true,
  222. rules: [
  223. {
  224. required: true,
  225. message: "请填写物料名称",
  226. trigger: "blur",
  227. },
  228. ],
  229. },
  230. {
  231. label: "图纸类型",
  232. prop: "drawingDictValue",
  233. search: true,
  234. filterable: true,
  235. type: "select",
  236. width: 100,
  237. overHidden: true,
  238. dicUrl: dictDataUtil.request_url + "drawing_type",
  239. props: { label: "dictLabel", value: "dictValue" },
  240. rules: [
  241. {
  242. required: true,
  243. message: "请选择图纸类型",
  244. trigger: "blur",
  245. },
  246. ],
  247. },
  248. {
  249. label: "文件",
  250. prop: "drawingPath",
  251. span: 24,
  252. slot: true,
  253. hide: true,
  254. rules: [
  255. {
  256. required: true,
  257. message: "请选择文件",
  258. trigger: "blur",
  259. },
  260. ],
  261. },
  262. {
  263. label: "文件名称",
  264. prop: "fileName",
  265. span: 24,
  266. width: 120,
  267. overHidden: true,
  268. display: false,
  269. },
  270. {
  271. label: "文件数组",
  272. prop: "drawingPathList",
  273. span: 24,
  274. hide: true,
  275. display: false,
  276. },
  277. {
  278. label: "pdf数组",
  279. prop: "pdfPathList",
  280. span: 24,
  281. hide: true,
  282. display: false,
  283. },
  284. {
  285. label: "文件名称数组",
  286. prop: "fileNameList",
  287. span: 24,
  288. slot: true,
  289. hide: true,
  290. display: false,
  291. },
  292. /*{ label: "文件",
  293. prop: "drawing",
  294. type: 'img',
  295. span: 24,
  296. display:false,
  297. slot: true,
  298. formatter: (row, column, cellValue, index) => {
  299. return import.meta.env.VITE_APP_UPLOAD_URL + `${row.drawingPath}`;} },*/
  300. {
  301. label: "版本",
  302. prop: "drawingVersion",
  303. precision: 1,
  304. min: 0,
  305. rules: [
  306. {
  307. required: true,
  308. message: "版本号不能为空",
  309. trigger: "blur",
  310. },
  311. ],
  312. },
  313. {
  314. label: "创建时间",
  315. prop: "created",
  316. width: 120,
  317. overHidden: true,
  318. display: false,
  319. },
  320. {
  321. label: "启用状态",
  322. slot: true,
  323. headerAlign: "center",
  324. prop: "enable",
  325. width: 100,
  326. display: false,
  327. },
  328. ],
  329. });
  330. const doEdit = (row, index) => {
  331. pdfUrlList.value = [];
  332. srcList.value = [];
  333. fileNameList.value = [];
  334. crudRef.value && crudRef.value.rowEdit(row, index);
  335. };
  336. const deleteRecord = (row, index, done) => {
  337. deleteRow(row, index, done);
  338. dataEditList();
  339. };
  340. </script>