index.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <template>
  2. <div class="table-box">
  3. <LjVxeTable
  4. ref="VxeTableRef"
  5. row-key="deptid"
  6. :columns="columns"
  7. :request-api="getData"
  8. :data-callback="dataCallback"
  9. :init-param="initParams"
  10. :dwname="dwname"
  11. :table-props="tableProps"
  12. :table-events="tableEvents"
  13. :auto-load-layout="false"
  14. >
  15. <template #tableHeader>
  16. <el-tabs v-model="initParams.kind" class="tableheader-tabs">
  17. <el-tab-pane label="床网" :name="0"></el-tab-pane>
  18. <el-tab-pane label="床垫" :name="1"></el-tab-pane>
  19. </el-tabs>
  20. </template>
  21. </LjVxeTable>
  22. </div>
  23. <LjDialog
  24. ref="LjDrawerRef"
  25. class="is-selector"
  26. v-bind="{
  27. ...drawerDefineProp
  28. }"
  29. :style="{ padding: 0 }"
  30. >
  31. <template #header>
  32. <div class="flx-1">
  33. <span class="text-h5-b">部门: {{ deptname }}</span>
  34. </div>
  35. </template>
  36. <div class="flx-1 h-full">
  37. <LjHeaderMenu :data="mainData" :action="orderStatus ? orderEditAction : orderDefaultAction" />
  38. <Detail class="flx-1" :data="mainData" :status="orderStatus" :enum="enumMap" />
  39. </div>
  40. </LjDialog>
  41. </template>
  42. <script setup lang="ts" name="saleprice_profitratelist">
  43. import { ref, onMounted, provide } from "vue";
  44. import { getProfitRateList } from "@/api/modules/saleprice";
  45. import { ColumnProps } from "@/components/LjVxeTable/interface";
  46. import LjDrawer from "@/components/LjDrawer/index.vue";
  47. import Detail from "./detail.vue";
  48. import { useHooks } from "./hooks/index";
  49. import LjDialog from "@/components/LjDialog/index.vue";
  50. import LjHeaderMenu from "@/components/LjHeaderMenu/index.vue";
  51. import { useI18n } from "vue-i18n";
  52. import { useAuthButtons } from "@/hooks/useAuthButtons";
  53. import { ALLOW_EDIT_STATE } from "@/config/index";
  54. import { cloneDeep } from "lodash-es";
  55. const dwname = "web_profitratelist";
  56. const mainData = ref({});
  57. const tableProps = {
  58. height: "auto",
  59. editConfig: { trigger: "click", mode: "cell" }
  60. // rowClassName: rowClsNameFunc
  61. // exportConfig: {
  62. // filename: t("menu.saletaskmx") + formatToDate(new Date(), "YYYY-MM-DD HH:mm:ss")
  63. // }
  64. };
  65. const { t } = useI18n();
  66. const { VxeTableRef, LjDetailRef, columns } = useHooks(t);
  67. const { CheckPower, CheckOption, buttonNew, buttonDefault } = useAuthButtons(t);
  68. const initParams = ref({ kind: 0 });
  69. const orderStatus = ref("");
  70. const deptname = ref("");
  71. const enumMap = ref(new Map());
  72. const orderDefaultAction = [
  73. buttonDefault({
  74. label: t("common.cancelText"),
  75. icon: "iconchevron-left"
  76. }),
  77. buttonNew({
  78. label: t("common.saveText"),
  79. icon: "iconsave-01",
  80. clickFunc: item => {
  81. // fSaveDept({ dept: LjDetailRef.value?.infoParam }).then(() => {
  82. // LjDrawerRef.value.hide();
  83. // });
  84. }
  85. })
  86. ];
  87. const orderEditAction = [
  88. buttonNew({
  89. label: t("common.saveText"),
  90. icon: "iconsave-01",
  91. clickFunc: item => {
  92. // fSaveDept({ dept: LjDetailRef.value?.infoParam }).then(() => {
  93. // LjDrawerRef.value.hide();
  94. // });
  95. console.log("LjDetailRef.value?.infoParam :>>>>>", LjDetailRef.value);
  96. }
  97. })
  98. ];
  99. /*
  100. * @description 抽屉默认属性
  101. */
  102. const drawerDefineProp = {
  103. draggable: true,
  104. overflow: true,
  105. width: "40%"
  106. // modalClass: "lj-file-dialog"
  107. };
  108. const getData = (params: any) => {
  109. return getProfitRateList(params);
  110. };
  111. const dataCallback = (data: any) => {
  112. let deptSet = new Map();
  113. let bednetMap = new Map();
  114. if (data.datatable?.length > 0) {
  115. data.datatable?.forEach((item: any) => {
  116. deptSet.has(item.deptid) || deptSet.set(item.deptid, {});
  117. bednetMap.has(item.bednettypeid_mattresstypeid) || bednetMap.set(item.bednettypeid_mattresstypeid, item.typename);
  118. let obj = deptSet.get(item.deptid);
  119. Reflect.set(obj, "deptid", parseInt(item.deptid));
  120. Reflect.set(obj, "deptname", item.deptname);
  121. Reflect.set(obj, `bednettype_${item.bednettypeid_mattresstypeid}`, item.bednettypeid_mattresstypeid);
  122. Reflect.set(obj, `profitrate_${item.bednettypeid_mattresstypeid}`, item.profitrate);
  123. });
  124. }
  125. let datatable = Array.from(deptSet.values());
  126. columns.length = 0;
  127. columns.push({
  128. type: "seq",
  129. title: "#",
  130. fixed: "left",
  131. width: 80
  132. });
  133. columns.push({
  134. field: "deptname",
  135. title: "部门",
  136. basicinfo: {
  137. el: "input",
  138. span: 2,
  139. editable: ALLOW_EDIT_STATE,
  140. props: {
  141. readonly: true
  142. }
  143. }
  144. });
  145. for (let item of bednetMap) {
  146. columns.push({
  147. field: `profitrate_${item[0]}`,
  148. title: item[1],
  149. basicinfo: {
  150. el: "input",
  151. span: 2,
  152. editable: ALLOW_EDIT_STATE,
  153. props: {
  154. placeholder: "请输入利润率"
  155. },
  156. rules: [{ required: true, message: "汇率不能为0", trigger: "change" }]
  157. }
  158. });
  159. }
  160. // if (data.tableinfo?.columns) {
  161. // data.tableinfo?.columns.map((item: any) => {
  162. // if (item?.enum) {
  163. // enumMap.value.set(item.field, item.enum);
  164. // }
  165. // });
  166. // }
  167. return {
  168. list: datatable,
  169. tableinfo: [],
  170. total: data.totalcnt,
  171. pageNum: data.pageindex,
  172. pageSize: data.pagesize
  173. };
  174. };
  175. const LjDrawerRef = ref();
  176. const handleDBlClickTable = ({ row, rowIndex, $rowIndex, column, columnIndex, $columnIndex, $event }: any) => {
  177. // 弹窗
  178. mainData.value = cloneDeep(row);
  179. deptname.value = row.deptname;
  180. orderStatus.value = "edit";
  181. LjDrawerRef.value.show();
  182. };
  183. // 返回绑定的事件
  184. const tableEvents = {
  185. "cell-dblclick": handleDBlClickTable
  186. // "cell-click": handleClickTable
  187. };
  188. </script>