index.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  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. searchEnter: true,
  168. selection: true,
  169. column: [
  170. {
  171. label: "工位编号",
  172. prop: "stationCode",
  173. overHidden: true,
  174. width: 120,
  175. search: true,
  176. display: false,
  177. rules: [
  178. {
  179. required: true,
  180. message: "请填写工位编号",
  181. trigger: "blur",
  182. },
  183. ],
  184. },
  185. {
  186. label: "工位名称",
  187. width: 120,
  188. prop: "name",
  189. search: true,
  190. overHidden: true,
  191. rules: [
  192. {
  193. required: true,
  194. message: "请填写工位名称",
  195. trigger: "blur",
  196. },
  197. ],
  198. },
  199. {
  200. label: "工位类型",
  201. prop: "stationDictValue",
  202. width: 90,
  203. search: true,
  204. overHidden: true,
  205. rules: [
  206. {
  207. required: true,
  208. message: "请选择工位类型",
  209. trigger: "blur",
  210. },
  211. ],
  212. type: "select",
  213. dicData: dicts.station_type,
  214. searchClearable: false, //可清空的输入框,默认为true
  215. filterable: true, //添加filterable属性即可启用搜索功能
  216. props: {
  217. label: "dictLabel", // 下拉菜单显示的字段
  218. value: "dictValue", // 下拉菜单值的字段
  219. },
  220. },
  221. {
  222. label: "操作方式",
  223. prop: "operateDictValue",
  224. width: 90,
  225. overHidden: true,
  226. rules: [
  227. {
  228. required: true,
  229. message: "操作方式",
  230. trigger: "blur",
  231. },
  232. ],
  233. type: "select",
  234. dicData: dicts.station_operate_type,
  235. props: {
  236. label: "dictLabel", // 下拉菜单显示的字段
  237. value: "dictValue", // 下拉菜单值的字
  238. },
  239. },
  240. {
  241. label: "负责人",
  242. prop: "manager",
  243. overHidden: true,
  244. width: 90,
  245. rules: [
  246. {
  247. required: true,
  248. message: "请选择负责人",
  249. trigger: "blur",
  250. },
  251. ],
  252. click: ({ value, column }) => {
  253. ctableRef.value.startSelect();
  254. },
  255. change: ({ value, column }) => {
  256. if (value != form.value.manager) {
  257. ctableRef.value.startSelect();
  258. }
  259. },
  260. },
  261. {
  262. label: "负责人id",
  263. prop: "managerId",
  264. hide: true,
  265. display: false,
  266. },
  267. {
  268. label: "所属产线",
  269. prop: "productionLineName",
  270. width: 90,
  271. overHidden: true,
  272. display: false,
  273. },
  274. {
  275. label: "工位地址",
  276. prop: "position",
  277. width: 90,
  278. overHidden: true,
  279. rules: [
  280. {
  281. required: true,
  282. message: "请填写工位地址",
  283. trigger: "blur",
  284. },
  285. ],
  286. },
  287. {
  288. label: "IP地址",
  289. prop: "stationIp",
  290. overHidden: true,
  291. width: 90,
  292. rules: [
  293. {
  294. required: true,
  295. message: "请填写工位IP地址",
  296. trigger: "blur",
  297. },
  298. ],
  299. },
  300. /*{ label: "启用状态",
  301. slot:true,
  302. headerAlign: 'center',
  303. prop: "enable",
  304. width: 100,
  305. display: false
  306. },*/
  307. {
  308. label: "工位描述",
  309. width: 90,
  310. overHidden: true,
  311. prop: "remark",
  312. type: "textarea",
  313. span: 24,
  314. },
  315. {
  316. label: "创建人",
  317. prop: "creator",
  318. overHidden: true,
  319. display: false,
  320. },
  321. {
  322. label: "创建时间",
  323. prop: "created",
  324. overHidden: true,
  325. display: false,
  326. },
  327. ],
  328. });
  329. </script>