index.vue 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407
  1. <template>
  2. <div class="mainContentBox">
  3. <avue-crud ref="crudRef1" v-model:search="data1.search" :data="data1.data" :option="data1.option"
  4. v-model:page="data1.page" @row-save="createRow" @row-update="updateRow" @row-del="deleteRow"
  5. @search-change="searchChange" @search-reset="resetChange" @size-change="dataList" @current-change="dataList"
  6. @selection-change="selectionChange" @cell-click="ckickCell">
  7. <template #header="{ size }">
  8. <div id="dailystoragecharts"></div>
  9. </template>
  10. </avue-crud>
  11. <el-dialog v-model="editDialog.visible" :title="editDialog.title" width="1200px"
  12. @close="editDialog.visible = false">
  13. <div class="mainContentBox">
  14. <avue-crud ref="crudRef2" v-model:search="data2.search" :data="data2.data" :option="data2.option"
  15. v-model:page="data2.page" @row-update="data2.Methords.updateRow" @row-del="data2.Methords.deleteRow"
  16. @search-change="data2.Methords.dataList" @search-reset="data2.Methords.resetChange"
  17. @size-change="data2.Methords.dataList" @current-change="data2.Methords.dataList"
  18. @selection-change="data2.Methords.selectionChange" />
  19. </div>
  20. </el-dialog>
  21. </div>
  22. </template>
  23. <script setup>
  24. import { ref, getCurrentInstance } from "vue";
  25. import { useCrud } from "@/hooks/userCrud";
  26. import { useCommonStoreHook, useDictionaryStore } from "@/store";
  27. import dictDataUtil from "@/common/configs/dictDataUtil";
  28. import editSkill from "@/views/base/skill/components/edit-skill.vue";
  29. import { getEchartData } from "@/api/report";
  30. import * as echarts from "echarts";
  31. // 数据字典相关
  32. const { dicts } = useDictionaryStore();
  33. const editDialog = ref({ visible: false, title: "订单详情" });
  34. // const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
  35. // useCrud({
  36. // src: "/api/v1/process/census/completeOrder",
  37. // });
  38. // ;
  39. const data1 = ref(
  40. useCrud({
  41. src: "/api/v1/process/census/completeOrder",
  42. })
  43. );
  44. const data2 = ref(
  45. useCrud({
  46. src: "/api/v1/process/census/completeSeq",
  47. })
  48. );
  49. const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
  50. data1.value.Methords;
  51. const { selectionChange, multipleDelete } = data1.value.Methords;
  52. const charts = shallowRef(null);
  53. const chartKey = ref(false);
  54. const chartsData = shallowRef([]);
  55. const cellStyle = ({ row, column, rowIndex, columnIndex }) => {
  56. if (columnIndex == 2) {
  57. // return "color:'#409eff';cursor:'pointer'";
  58. return "cellStyle";
  59. }
  60. };
  61. const ckickCell = (row, column, cell, event) => {
  62. if (column.label === "订单名称") {
  63. data2.value.search.completeTime = row.completeTime;
  64. data2.value.search.orderCode = row.orderCode;
  65. editDialog.value.visible = true;
  66. }
  67. };
  68. // 设置表格列或者其他自定义的option
  69. data1.value.option = Object.assign(data1.value.option, {
  70. selection: false,
  71. menu: false,
  72. menuWidth: 100,
  73. addBtn: false,
  74. filterBtn: false,
  75. searchShowBtn: false,
  76. columnBtn: false,
  77. gridBtn: false,
  78. editBtn: false,
  79. viewBtn: false,
  80. delBtn: false,
  81. column: [
  82. {
  83. label: "日期范围",
  84. prop: "searchTime",
  85. search: true,
  86. hide: true,
  87. type: "date",
  88. format: "YYYY-MM-DD",
  89. valueFormat: "YYYY-MM-DD",
  90. searchRange: true,
  91. startPlaceholder: "开始日期",
  92. endPlaceholder: "结束日期",
  93. },
  94. {
  95. label: "erp订单号",
  96. prop: "erpCode",
  97. overHidden: true,
  98. search: true,
  99. editDisabled: true,
  100. hide: true,
  101. },
  102. {
  103. label: "产品规格",
  104. prop: "userName",
  105. overHidden: true,
  106. search: true,
  107. editDisabled: true,
  108. hide: true,
  109. },
  110. {
  111. label: "订单编码",
  112. prop: "orderCode",
  113. overHidden: true,
  114. search: true,
  115. editDisabled: true,
  116. },
  117. {
  118. label: "订单名称",
  119. prop: "orderName",
  120. width: 140,
  121. overHidden: true,
  122. search: true,
  123. editDisabled: true,
  124. hide: true,
  125. },
  126. {
  127. label: "项目编码",
  128. prop: "projectCode",
  129. width: 140,
  130. overHidden: true,
  131. search: true,
  132. editDisabled: true,
  133. hide: true,
  134. },
  135. {
  136. label: "订单名称",
  137. prop: "orderName",
  138. search: false,
  139. slot: true,
  140. html: true,
  141. formatter: (val) => {
  142. return (
  143. '<span style="color:#409eff;cursor:pointer">' +
  144. val.orderName +
  145. "</span>"
  146. );
  147. },
  148. },
  149. {
  150. label: "erp订单号",
  151. prop: "erpCode",
  152. search: false,
  153. },
  154. {
  155. label: "交付日期",
  156. prop: "deliverTime",
  157. search: false,
  158. },
  159. {
  160. label: "完工日期",
  161. prop: "completeTime",
  162. search: false,
  163. },
  164. {
  165. label: "项目编码",
  166. prop: "projectCode",
  167. search: false,
  168. },
  169. {
  170. label: "产品编码",
  171. prop: "materialCode",
  172. search: false,
  173. },
  174. {
  175. label: "产品名称",
  176. prop: "materialName",
  177. search: false,
  178. },
  179. {
  180. label: "产品规格",
  181. prop: "materialModel",
  182. search: false,
  183. },
  184. {
  185. label: "计划总共用时(秒)",
  186. prop: "planTotalTime",
  187. search: false,
  188. },
  189. {
  190. label: "实际总共用时(秒)",
  191. prop: "realTotalTime",
  192. search: false,
  193. },
  194. {
  195. label: "总入库数量",
  196. prop: "total",
  197. search: false,
  198. },
  199. ],
  200. });
  201. data2.value.option = Object.assign(data2.value.option, {
  202. selection: false,
  203. addBtn: false,
  204. filterBtn: false,
  205. searchShowBtn: false,
  206. menu: false,
  207. addBtn: false,
  208. filterBtn: false,
  209. searchShowBtn: false,
  210. columnBtn: false,
  211. gridBtn: false,
  212. editBtn: false,
  213. viewBtn: false,
  214. delBtn: false,
  215. column: [
  216. {
  217. label: "流转卡号",
  218. prop: "seqNo",
  219. search: false,
  220. width:150,
  221. overHidden:true,
  222. },
  223. {
  224. label: "交付日期",
  225. prop: "deliverTime",
  226. search: false,
  227. },
  228. {
  229. label: "完工日期",
  230. prop: "completeTime",
  231. search: false,
  232. },
  233. {
  234. label: "项目编码",
  235. prop: "projectCode",
  236. search: false,
  237. },
  238. {
  239. label: "产品编码",
  240. prop: "materialCode",
  241. search: false,
  242. },
  243. {
  244. label: "产品名称",
  245. prop: "materialName",
  246. search: false,
  247. },
  248. {
  249. label: "产品规格",
  250. prop: "materialModel",
  251. search: false,
  252. },
  253. {
  254. label: "计划总共用时",
  255. prop: "planTotalTime",
  256. search: false,
  257. },
  258. {
  259. label: "实际总共用时",
  260. prop: "realTotalTime",
  261. search: false,
  262. },
  263. {
  264. label: "总入库数量",
  265. prop: "total",
  266. search: false,
  267. },
  268. ],
  269. });
  270. const getCurrentMonthStartAndEndDates = () => {
  271. // 获取当前日期
  272. let now = new Date();
  273. // 获取当前月份的第一天
  274. let startDate = new Date(now.getFullYear(), now.getMonth(), 1);
  275. // 获取当前月份的最后一天
  276. let endDate = new Date(now.getFullYear(), now.getMonth() + 1, 0);
  277. // 格式化日期为'YYYY-MM-DD'格式
  278. function formatDate(date) {
  279. let year = date.getFullYear();
  280. let month = String(date.getMonth() + 1).padStart(2, "0");
  281. let day = String(date.getDate()).padStart(2, "0");
  282. return `${year}-${month}-${day}`;
  283. }
  284. // 返回包含开始和结束日期的数组
  285. return [formatDate(startDate), formatDate(endDate)];
  286. };
  287. const chartSeriesData = shallowRef([]);
  288. const setChartSeries = () => {
  289. let array = [];
  290. for (let j = 0; j < chartsData.value.orderData.length; j++) {
  291. array.push({
  292. name: chartsData.value.orderData[j].orderName,
  293. type: "bar",
  294. barGap: 0,
  295. label: labelOption,
  296. emphasis: {
  297. focus: "series",
  298. },
  299. data: chartsData.value.orderData[j].total,
  300. });
  301. }
  302. chartSeriesData.value = array;
  303. };
  304. const echartOption = ref({
  305. tooltip: {
  306. trigger: "axis",
  307. axisPointer: {
  308. type: "shadow",
  309. },
  310. },
  311. legend: {
  312. // data: chartsData.value.orderCodes,
  313. data: [],
  314. },
  315. xAxis: [
  316. {
  317. type: "category",
  318. axisTick: { show: false },
  319. // data: chartsData.value.dateList,
  320. data: [],
  321. },
  322. ],
  323. yAxis: [
  324. {
  325. type: "value",
  326. },
  327. ],
  328. toolbox: {
  329. feature: {
  330. saveAsImage: {},
  331. },
  332. },
  333. series: [],
  334. // series: chartSeriesData.value,
  335. });
  336. const clickSearch = async () => {
  337. await setChartsData();
  338. await setChartSeries();
  339. echartOption.value.legend.data = chartsData.value.orderCodes;
  340. echartOption.value.xAxis[0].data = chartsData.value.dateList;
  341. echartOption.value.series = chartSeriesData.value;
  342. charts.value.setOption(echartOption.value, true);
  343. };
  344. //设置搜索条件中的时间范围为默认此月
  345. const setTime = () => {
  346. data1.value.search.searchTime = getCurrentMonthStartAndEndDates();
  347. };
  348. const labelOption = {
  349. show: false,
  350. position: "insideBottom",
  351. distance: 15,
  352. align: "left",
  353. verticalAlign: "middle",
  354. rotate: 90,
  355. formatter: "{c} {name|{a}}",
  356. fontSize: 24,
  357. rich: {
  358. name: {},
  359. },
  360. };
  361. const setChartsData = async () => {
  362. const { data } = await getEchartData(data1.value.search);
  363. chartsData.value = data;
  364. };
  365. onMounted(async () => {
  366. setTime();
  367. charts.value = echarts.init(document.getElementById("dailystoragecharts"));
  368. dataList();
  369. });
  370. watch(
  371. () => editDialog.value.visible,
  372. () => {
  373. if (editDialog.value.visible == true) {
  374. data2.value.Methords.dataList();
  375. }
  376. }
  377. );
  378. watch(
  379. () => data1.value.data,
  380. () => {
  381. clickSearch();
  382. }
  383. );
  384. </script>
  385. <style lang="scss" scoped>
  386. :deep(.avue-crud__left) {
  387. width: 100%;
  388. }
  389. .cellStyle {
  390. color: "#409eff" !important;
  391. cursor: "pointer" !important;
  392. }
  393. #dailystoragecharts {
  394. width: 100%;
  395. height: 400px;
  396. border: 1px solid #ccc;
  397. }
  398. </style>