index.vue 9.1 KB

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