index.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  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="rowSave"
  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 #enable="scope">
  20. <el-switch
  21. active-value="1"
  22. inactive-value="0"
  23. inline-prompt
  24. active-text="启用"
  25. inactive-text="禁用"
  26. v-model="scope.row.enable"
  27. @click="changeItem(scope.row)"
  28. class="ml-2"
  29. style="&#45;&#45;el-switch-on-color: #13ce66; &#45;&#45;el-switch-off-color: #ff4949"
  30. />
  31. </template>-->
  32. <template #menu-left="{ size }">
  33. <el-button
  34. :disabled="toDeleteIds.length < 1"
  35. type="danger"
  36. icon="el-icon-delete"
  37. :size="size"
  38. @click="multipleDelete"
  39. >删除</el-button
  40. >
  41. </template>
  42. <template #menu="{ row, index, type }">
  43. <el-button
  44. @click="binding(row)"
  45. icon="el-icon-ticket"
  46. text
  47. type="primary"
  48. >设备</el-button
  49. >
  50. </template>
  51. </avue-crud>
  52. <el-dialog
  53. v-model="dialog.visible"
  54. :title="dialog.title"
  55. width="900px"
  56. @close="dialog.visible = false"
  57. :destroy-on-close="true"
  58. >
  59. <station-page :stationId="stationDevice.id" />
  60. </el-dialog>
  61. <CommonTable
  62. ref="ctableRef"
  63. tableTitle="员工选择"
  64. tableType="USERS"
  65. @selected-sure="onSelectedFinish"
  66. />
  67. </div>
  68. </template>
  69. <script setup="ts">
  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. import { updateStation } from "@/api/station";
  75. const { isShowTable, tableType } = toRefs(useCommonStoreHook());
  76. import { useDictionaryStore } from "@/store";
  77. const { dicts } = useDictionaryStore();
  78. const test = () => {
  79. isShowTable.value = true;
  80. tableType.value = tableType.value == 1 ? 2 : 1;
  81. };
  82. // 传入一个url,后面不带/
  83. const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
  84. useCrud({
  85. src: "/api/v1/base/station",
  86. });
  87. const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
  88. Methords; //增删改查
  89. const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
  90. const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
  91. // checkBtnPerm(ButtonPermKeys.PLAN.BTNS.order_add) :permission="permission"
  92. // const permission = reactive({
  93. // delBtn: checkPerm(buttonPermission.PLAN.BTNS.order_del),
  94. // addBtn: checkPerm(buttonPermission.PLAN.BTNS.order_add),
  95. // editBtn: checkPerm(buttonPermission.PLAN.BTNS.order_edit),
  96. // menu: true,
  97. // });
  98. function rowSave(form, done, loading) {
  99. const parts = form.stationIp.split(".");
  100. if (parts.length !== 4) {
  101. ElMessage({
  102. message: "工位ip格式不正确",
  103. type: "error",
  104. });
  105. loading();
  106. return false;
  107. }
  108. for (const part of parts) {
  109. if (isNaN(part) || part < 0 || part > 255) {
  110. ElMessage({
  111. message: "工位ip格式不正确",
  112. type: "error",
  113. });
  114. loading();
  115. return false;
  116. }
  117. }
  118. createRow(form, done, loading);
  119. }
  120. const crudRef = ref(null); //crudRef.value 获取avue-crud对象
  121. onMounted(() => {
  122. // console.log("crudRef", crudRef)
  123. dataList();
  124. });
  125. const ctableRef = ref(null);
  126. /**
  127. * 上传excel相关
  128. */
  129. const uploadRef = ref(null);
  130. const uploadFinished = () => {
  131. // 上传完成后的刷新操作
  132. page.currentPage = 1;
  133. dataList();
  134. };
  135. const importExcelData = () => {
  136. if (uploadRef.value) {
  137. uploadRef.value.show("/api/v1/base/station");
  138. }
  139. };
  140. const dialog = reactive({
  141. title: "设备绑定",
  142. visible: false,
  143. });
  144. const stationDevice = ref(null);
  145. const binding = (row) => {
  146. dialog.visible = true;
  147. stationDevice.value = row;
  148. };
  149. const onSelectedFinish = (selectedValue) => {
  150. form.value.manager = selectedValue.userName;
  151. form.value.managerId = selectedValue.id;
  152. };
  153. const stationUpdate = ref({});
  154. const changeItem = (row) => {
  155. stationUpdate.value.id = row.id;
  156. stationUpdate.value.enable = row.enable;
  157. updateStation(stationUpdate.value).then((data) => {
  158. dataList();
  159. ElMessage({
  160. message: data.msg,
  161. type: "success",
  162. });
  163. });
  164. };
  165. // 设置表格列或者其他自定义的option
  166. option.value = Object.assign(option.value, {
  167. selection: true,
  168. column: [
  169. {
  170. label: "工位编号",
  171. prop: "stationCode",
  172. overHidden: true,
  173. width: 120,
  174. search: true,
  175. rules: [
  176. {
  177. required: true,
  178. message: "请填写工位编号",
  179. trigger: "blur",
  180. },
  181. ],
  182. },
  183. {
  184. label: "工位名称",
  185. width: 120,
  186. prop: "name",
  187. search: true,
  188. overHidden: true,
  189. rules: [
  190. {
  191. required: true,
  192. message: "请填写工位名称",
  193. trigger: "blur",
  194. },
  195. ],
  196. },
  197. {
  198. label: "工位类型",
  199. prop: "stationDictValue",
  200. width: 90,
  201. search: true,
  202. overHidden: true,
  203. rules: [
  204. {
  205. required: true,
  206. message: "请选择工位类型",
  207. trigger: "blur",
  208. },
  209. ],
  210. type: "select",
  211. dicData: dicts.station_type,
  212. searchClearable: false, //可清空的输入框,默认为true
  213. filterable: true, //添加filterable属性即可启用搜索功能
  214. props: {
  215. label: "dictLabel", // 下拉菜单显示的字段
  216. value: "dictValue", // 下拉菜单值的字段
  217. },
  218. },
  219. {
  220. label: "操作方式",
  221. prop: "operateDictValue",
  222. width: 90,
  223. overHidden: true,
  224. rules: [
  225. {
  226. required: true,
  227. message: "操作方式",
  228. trigger: "blur",
  229. },
  230. ],
  231. type: "select",
  232. dicData: dicts.station_operate_type,
  233. props: {
  234. label: "dictLabel", // 下拉菜单显示的字段
  235. value: "dictValue", // 下拉菜单值的字
  236. },
  237. },
  238. {
  239. label: "负责人",
  240. prop: "manager",
  241. overHidden: true,
  242. width: 90,
  243. rules: [
  244. {
  245. required: true,
  246. message: "请选择负责人",
  247. trigger: "blur",
  248. },
  249. ],
  250. click: ({ value, column }) => {
  251. ctableRef.value.startSelect();
  252. },
  253. change: ({ value, column }) => {
  254. if (value != form.value.manager) {
  255. ctableRef.value.startSelect();
  256. }
  257. },
  258. },
  259. {
  260. label: "负责人id",
  261. prop: "managerId",
  262. hide: true,
  263. display: false,
  264. },
  265. {
  266. label: "所属产线",
  267. prop: "productionLineName",
  268. width: 90,
  269. overHidden: true,
  270. display: false,
  271. },
  272. {
  273. label: "工位地址",
  274. prop: "position",
  275. width: 90,
  276. overHidden: true,
  277. rules: [
  278. {
  279. required: true,
  280. message: "请填写工位地址",
  281. trigger: "blur",
  282. },
  283. ],
  284. },
  285. {
  286. label: "IP地址",
  287. prop: "stationIp",
  288. overHidden: true,
  289. width: 90,
  290. rules: [
  291. {
  292. required: true,
  293. message: "请填写工位IP地址",
  294. trigger: "blur",
  295. },
  296. ],
  297. },
  298. /*{ label: "启用状态",
  299. slot:true,
  300. headerAlign: 'center',
  301. prop: "enable",
  302. width: 100,
  303. display: false
  304. },*/
  305. {
  306. label: "工位描述",
  307. width: 90,
  308. overHidden: true,
  309. prop: "remark",
  310. type: "textarea",
  311. span: 24,
  312. },
  313. {
  314. label: "创建人",
  315. prop: "creator",
  316. overHidden: true,
  317. display: false,
  318. },
  319. {
  320. label: "创建时间",
  321. prop: "created",
  322. overHidden: true,
  323. display: false,
  324. },
  325. ],
  326. });
  327. </script>