Manualdocuments.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659
  1. <template>
  2. <div>
  3. <el-container>
  4. <el-aside width="200px">
  5. <div class="JKWTree-tree">
  6. <h3 > 组织列表</h3>
  7. <el-tree :data="treeData" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
  8. </div>
  9. </el-aside>
  10. <el-container>
  11. <!-- <el-header>dd</el-header>-->
  12. <el-main>
  13. <div class="gva-search-box">
  14. <el-form ref="elSearchFormRef" :inline="true" :model="searchInfo" class="demo-form-inline" :rules="searchRule" @keyup.enter="onSubmit">
  15. <el-form-item label="创建日期" prop="createdAt">
  16. <template #label>
  17. <span>
  18. 创建日期
  19. <el-tooltip content="搜索范围是开始日期(包含)至结束日期(不包含)">
  20. <el-icon><QuestionFilled /></el-icon>
  21. </el-tooltip>
  22. </span>
  23. </template>
  24. <el-date-picker v-model="searchInfo.startCreatedAt" type="datetime" placeholder="开始日期" :disabled-date="time=> searchInfo.endCreatedAt ? time.getTime() > searchInfo.endCreatedAt.getTime() : false"></el-date-picker>
  25. <el-date-picker v-model="searchInfo.endCreatedAt" type="datetime" placeholder="结束日期" :disabled-date="time=> searchInfo.startCreatedAt ? time.getTime() < searchInfo.startCreatedAt.getTime() : false"></el-date-picker>
  26. </el-form-item>
  27. <el-form-item>
  28. <el-button type="primary" icon="search" @click="onSubmit">查询</el-button>
  29. <el-button icon="refresh" @click="onReset">重置</el-button>
  30. </el-form-item>
  31. </el-form>
  32. </div>
  33. <div class="gva-table-box">
  34. <div class="gva-btn-list">
  35. <el-button type="primary" icon="plus" @click="openDialog">新增</el-button>
  36. <el-popover v-model:visible="deleteVisible" :disabled="!multipleSelection.length" placement="top" width="160">
  37. <p>确定要删除吗?</p>
  38. <div style="text-align: right; margin-top: 8px;">
  39. <el-button type="primary" link @click="deleteVisible = false">取消</el-button>
  40. <el-button type="primary" @click="onDelete">确定</el-button>
  41. </div>
  42. <template #reference>
  43. <el-button icon="delete" style="margin-left: 10px;" :disabled="!multipleSelection.length" @click="deleteVisible = true">删除</el-button>
  44. </template>
  45. </el-popover>
  46. </div>
  47. <el-table
  48. :data="tableData"
  49. height="300"
  50. border
  51. highlight-current-row
  52. @current-change="handleCurrentChange"
  53. @row-dblclick="dbSelected"
  54. style="width: 100%">
  55. <el-table-column
  56. fixed
  57. prop="worknum"
  58. label="工单编号"
  59. width="100">
  60. </el-table-column>
  61. <el-table-column
  62. fixed
  63. prop="name"
  64. label="产品名称"
  65. width="180">
  66. </el-table-column>
  67. <el-table-column
  68. prop="process"
  69. label="印件及工序"
  70. width="180">
  71. </el-table-column>
  72. <el-table-column
  73. prop="manufacturetime"
  74. label="生产日期"
  75. width="180">
  76. </el-table-column>
  77. <el-table-column
  78. prop="Machine"
  79. label="机台"
  80. width="180">
  81. </el-table-column>
  82. <el-table-column
  83. prop="Team"
  84. label="班组"
  85. width="180">
  86. </el-table-column>
  87. <el-table-column
  88. prop="processsheet"
  89. label="流程单"
  90. width="180">
  91. </el-table-column>
  92. <el-table-column
  93. prop="production"
  94. label="车头产量"
  95. width="180">
  96. </el-table-column>
  97. <el-table-column
  98. prop="shades"
  99. label="色度数"
  100. width="180">
  101. </el-table-column>
  102. <el-table-column
  103. prop="processwaste"
  104. label="制程废"
  105. width="180">
  106. </el-table-column>
  107. <el-table-column
  108. prop="defective"
  109. label="次品"
  110. width="180">
  111. </el-table-column>
  112. <el-table-column
  113. prop="incomingerror"
  114. label="来料异常"
  115. width="180">
  116. </el-table-column>
  117. <el-table-column
  118. prop="platework"
  119. label="装版工时"
  120. width="180">
  121. </el-table-column>
  122. <el-table-column
  123. prop="maintenancework"
  124. label="保养工时"
  125. width="180">
  126. </el-table-column>
  127. <el-table-column
  128. prop="proofingwork"
  129. label="打样工时"
  130. width="180">
  131. </el-table-column>
  132. <el-table-column
  133. prop="stopwork"
  134. label="异常停机工时"
  135. width="180">
  136. </el-table-column>
  137. <el-table-column
  138. prop="runwork"
  139. label="设备运行工时"
  140. width="180">
  141. </el-table-column>
  142. <el-table-column
  143. prop="teamnumber1"
  144. label="组员编号1"
  145. width="180">
  146. </el-table-column>
  147. <el-table-column
  148. prop="teamname1"
  149. label="组员姓名1"
  150. width="180">
  151. </el-table-column>
  152. <el-table-column
  153. prop="teamnumber2"
  154. label="组员编号2"
  155. width="180">
  156. </el-table-column>
  157. <el-table-column
  158. prop="teamname2"
  159. label="组员姓名"
  160. width="180">
  161. </el-table-column>
  162. <el-table-column
  163. prop="teamnumber3"
  164. label="组员编号3"
  165. width="180">
  166. </el-table-column>
  167. <el-table-column
  168. prop="teamname3"
  169. label="组员姓名3"
  170. width="180">
  171. </el-table-column>
  172. <el-table-column
  173. prop="teamnumber4"
  174. label="组员编号4"
  175. width="180">
  176. </el-table-column>
  177. <el-table-column
  178. prop="teamname4"
  179. label="组员姓名4"
  180. width="180">
  181. </el-table-column>
  182. <el-table-column
  183. prop="teamnumber5"
  184. label="组员编号5"
  185. width="180">
  186. </el-table-column>
  187. <el-table-column
  188. prop="teamname5"
  189. label="组员姓名5"
  190. width="180">
  191. </el-table-column>
  192. <el-table-column
  193. prop="teamnumber6"
  194. label="组员编号6"
  195. width="180">
  196. </el-table-column>
  197. <el-table-column
  198. prop="teamname6"
  199. label="组员姓名6"
  200. width="180">
  201. </el-table-column>
  202. <el-table-column
  203. prop="combinecoefficients"
  204. label="拆片联拼系数"
  205. width="180">
  206. </el-table-column>
  207. <el-table-column
  208. prop="casletcoefficient"
  209. label="拆片小盒系数"
  210. width="180">
  211. </el-table-column>
  212. <el-table-column
  213. prop="ratefactor"
  214. label="工价系数"
  215. width="180">
  216. </el-table-column>
  217. <el-table-column
  218. prop="dailyquota"
  219. label="日定额"
  220. width="180">
  221. </el-table-column>
  222. <el-table-column
  223. prop="piecesprice "
  224. label="千件工价"
  225. width="180">
  226. </el-table-column>
  227. <el-table-column
  228. prop="addstandards "
  229. label="补产标准"
  230. width="180">
  231. </el-table-column>
  232. <el-table-column
  233. prop="creatuser"
  234. label="创建用户"
  235. width="180">
  236. </el-table-column>
  237. <el-table-column
  238. prop="creattime"
  239. label="创建时间"
  240. width="180">
  241. </el-table-column>
  242. <el-table-column
  243. prop="updatetime"
  244. label="修改时间"
  245. width="180">
  246. </el-table-column>
  247. </el-table>
  248. <div class="gva-pagination">
  249. <el-pagination
  250. layout="total, sizes, prev, pager, next, jumper"
  251. :current-page="page"
  252. :page-size="pageSize"
  253. :page-sizes="[10, 30, 50, 100]"
  254. :total="total"
  255. @current-change="handleCurrentChange"
  256. @size-change="handleSizeChange"
  257. />
  258. </div>
  259. </div>
  260. <el-dialog v-model="dialogFormVisible" :before-close="closeDialog" :title="type==='create'?'添加':'修改'" destroy-on-close>
  261. <el-scrollbar height="500px">
  262. <el-form :model="formData" label-position="right" ref="elFormRef" :rules="rule" label-width="80px">
  263. <el-form-item label="address字段:" prop="address" >
  264. <el-input v-model="formData.address" :clearable="true" placeholder="请输入address字段" />
  265. </el-form-item>
  266. <el-form-item label="image字段:" prop="image" >
  267. <el-input v-model="formData.image" :clearable="true" placeholder="请输入image字段" />
  268. </el-form-item>
  269. <el-form-item label="name字段:" prop="name" >
  270. <el-input v-model="formData.name" :clearable="true" placeholder="请输入name字段" />
  271. </el-form-item>
  272. </el-form>
  273. </el-scrollbar>
  274. <template #footer>
  275. <div class="dialog-footer">
  276. <el-button @click="closeDialog">取 消</el-button>
  277. <el-button type="primary" @click="enterDialog">确 定</el-button>
  278. </div>
  279. </template>
  280. </el-dialog>
  281. <el-dialog v-model="detailShow" style="width: 800px" lock-scroll :before-close="closeDetailShow" title="查看详情" destroy-on-close>
  282. <el-scrollbar height="550px">
  283. <el-descriptions column="1" border>
  284. <el-descriptions-item label="address字段">
  285. {{ formData.address }}
  286. </el-descriptions-item>
  287. <el-descriptions-item label="image字段">
  288. {{ formData.image }}
  289. </el-descriptions-item>
  290. <el-descriptions-item label="name字段">
  291. {{ formData.name }}
  292. </el-descriptions-item>
  293. </el-descriptions>
  294. </el-scrollbar>
  295. </el-dialog>
  296. </el-main>
  297. </el-container>
  298. </el-container>
  299. </div>
  300. </template>
  301. <script setup>
  302. import {
  303. createCompany,
  304. deleteCompany,
  305. deleteCompanyByIds,
  306. updateCompany,
  307. findCompany,
  308. getCompanyList
  309. } from '@/api/company'
  310. // 全量引入格式化工具 请按需保留
  311. import { getDictFunc, formatDate, formatBoolean, filterDict, ReturnArrImg, onDownloadFile } from '@/utils/format'
  312. import { ElMessage, ElMessageBox } from 'element-plus'
  313. import { ref, reactive } from 'vue'
  314. defineOptions({
  315. name: 'Company'
  316. })
  317. const treeData=ref([{
  318. label: '一级 1',
  319. children: [{
  320. label: '二级 1-1',
  321. children: [{
  322. label: '三级 1-1-1'
  323. }]
  324. }]
  325. }, {
  326. label: '一级 2',
  327. children: [{
  328. label: '二级 2-1',
  329. children: [{
  330. label: '三级 2-1-1'
  331. }]
  332. }, {
  333. label: '二级 2-2',
  334. children: [{
  335. label: '三级 2-2-1'
  336. }]
  337. }]
  338. }, {
  339. label: '一级 3',
  340. children: [{
  341. label: '二级 3-1',
  342. children: [{
  343. label: '三级 3-1-1'
  344. }]
  345. }, {
  346. label: '二级 3-2',
  347. children: [{
  348. label: '三级 3-2-1'
  349. }]
  350. }]
  351. }])
  352. const handleNodeClick = (node,check) => {
  353. //存放当前节点的nodeId
  354. console.log(node,check);
  355. }
  356. // 自动化生成的字典(可能为空)以及字段
  357. const formData = ref({
  358. worknum: '',
  359. dailyquota: '',
  360. name: '',
  361. })
  362. // 验证规则
  363. const rule = reactive({
  364. })
  365. const searchRule = reactive({
  366. createdAt: [
  367. { validator: (rule, value, callback) => {
  368. if (searchInfo.value.startCreatedAt && !searchInfo.value.endCreatedAt) {
  369. callback(new Error('请填写结束日期'))
  370. } else if (!searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt) {
  371. callback(new Error('请填写开始日期'))
  372. } else if (searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt && (searchInfo.value.startCreatedAt.getTime() === searchInfo.value.endCreatedAt.getTime() || searchInfo.value.startCreatedAt.getTime() > searchInfo.value.endCreatedAt.getTime())) {
  373. callback(new Error('开始日期应当早于结束日期'))
  374. } else {
  375. callback()
  376. }
  377. }, trigger: 'change' }
  378. ],
  379. })
  380. const elFormRef = ref()
  381. const elSearchFormRef = ref()
  382. // =========== 表格控制部分 ===========
  383. const page = ref(1)
  384. const total = ref(0)
  385. const pageSize = ref(10)
  386. const tableData = ref([])
  387. const searchInfo = ref({})
  388. // 重置
  389. const onReset = () => {
  390. searchInfo.value = {}
  391. getTableData()
  392. }
  393. // 搜索
  394. const onSubmit = () => {
  395. elSearchFormRef.value?.validate(async(valid) => {
  396. if (!valid) return
  397. page.value = 1
  398. pageSize.value = 10
  399. getTableData()
  400. })
  401. }
  402. // 分页
  403. const handleSizeChange = (val) => {
  404. pageSize.value = val
  405. getTableData()
  406. }
  407. // 修改页面容量
  408. const handleCurrentChange = (val) => {
  409. page.value = val
  410. getTableData()
  411. }
  412. // 查询
  413. const getTableData = async() => {
  414. const table = await getCompanyList({ page: page.value, pageSize: pageSize.value, ...searchInfo.value })
  415. if (table.code === 0) {
  416. tableData.value = table.data.list
  417. total.value = table.data.total
  418. page.value = table.data.page
  419. pageSize.value = table.data.pageSize
  420. }
  421. }
  422. getTableData()
  423. // ============== 表格控制部分结束 ===============
  424. // 获取需要的字典 可能为空 按需保留
  425. const setOptions = async () =>{
  426. }
  427. // 获取需要的字典 可能为空 按需保留
  428. setOptions()
  429. // 多选数据
  430. const multipleSelection = ref([])
  431. // 多选
  432. const handleSelectionChange = (val) => {
  433. multipleSelection.value = val
  434. }
  435. // 删除行
  436. const deleteRow = (row) => {
  437. ElMessageBox.confirm('确定要删除吗?', '提示', {
  438. confirmButtonText: '确定',
  439. cancelButtonText: '取消',
  440. type: 'warning'
  441. }).then(() => {
  442. deleteCompanyFunc(row)
  443. })
  444. }
  445. // 批量删除控制标记
  446. const deleteVisible = ref(false)
  447. // 多选删除
  448. const onDelete = async() => {
  449. const ids = []
  450. if (multipleSelection.value.length === 0) {
  451. ElMessage({
  452. type: 'warning',
  453. message: '请选择要删除的数据'
  454. })
  455. return
  456. }
  457. multipleSelection.value &&
  458. multipleSelection.value.map(item => {
  459. ids.push(item.ID)
  460. })
  461. const res = await deleteCompanyByIds({ ids })
  462. if (res.code === 0) {
  463. ElMessage({
  464. type: 'success',
  465. message: '删除成功'
  466. })
  467. if (tableData.value.length === ids.length && page.value > 1) {
  468. page.value--
  469. }
  470. deleteVisible.value = false
  471. getTableData()
  472. }
  473. }
  474. // 行为控制标记(弹窗内部需要增还是改)
  475. const type = ref('')
  476. // 更新行
  477. const updateCompanyFunc = async(row) => {
  478. const res = await findCompany({ ID: row.ID })
  479. type.value = 'update'
  480. if (res.code === 0) {
  481. formData.value = res.data.recompany
  482. dialogFormVisible.value = true
  483. }
  484. }
  485. // 删除行
  486. const deleteCompanyFunc = async (row) => {
  487. const res = await deleteCompany({ ID: row.ID })
  488. if (res.code === 0) {
  489. ElMessage({
  490. type: 'success',
  491. message: '删除成功'
  492. })
  493. if (tableData.value.length === 1 && page.value > 1) {
  494. page.value--
  495. }
  496. getTableData()
  497. }
  498. }
  499. // 弹窗控制标记
  500. const dialogFormVisible = ref(false)
  501. // 查看详情控制标记
  502. const detailShow = ref(false)
  503. // 打开详情弹窗
  504. const openDetailShow = () => {
  505. detailShow.value = true
  506. }
  507. // 打开详情
  508. const getDetails = async (row) => {
  509. // 打开弹窗
  510. const res = await findCompany({ ID: row.ID })
  511. if (res.code === 0) {
  512. formData.value = res.data.recompany
  513. openDetailShow()
  514. }
  515. }
  516. // 关闭详情弹窗
  517. const closeDetailShow = () => {
  518. detailShow.value = false
  519. formData.value = {
  520. address: '',
  521. image: '',
  522. name: '',
  523. }
  524. }
  525. // 打开弹窗
  526. const openDialog = () => {
  527. type.value = 'create'
  528. dialogFormVisible.value = true
  529. }
  530. const dbSelected = () => {
  531. type.value = 'create'
  532. dialogFormVisible.value = true
  533. }
  534. // 关闭弹窗
  535. const closeDialog = () => {
  536. dialogFormVisible.value = false
  537. formData.value = {
  538. address: '',
  539. image: '',
  540. name: '',
  541. }
  542. }
  543. // 弹窗确定
  544. const enterDialog = async () => {
  545. elFormRef.value?.validate( async (valid) => {
  546. if (!valid) return
  547. let res
  548. switch (type.value) {
  549. case 'create':
  550. res = await createCompany(formData.value)
  551. break
  552. case 'update':
  553. res = await updateCompany(formData.value)
  554. break
  555. default:
  556. res = await createCompany(formData.value)
  557. break
  558. }
  559. if (res.code === 0) {
  560. ElMessage({
  561. type: 'success',
  562. message: '创建/更改成功'
  563. })
  564. closeDialog()
  565. getTableData()
  566. }
  567. })
  568. }
  569. </script>
  570. <style>
  571. .JKWTree-container {
  572. display: flex;
  573. }
  574. .JKWTree-tree {
  575. width: 300px;
  576. background-color: #fff;
  577. padding: 10px;
  578. margin-right: 20px;
  579. }
  580. .JKWTree-tree h3 {
  581. font-size: 15px;
  582. font-weight: 700;
  583. margin: 10px 0;
  584. }
  585. .JKWTree-content {
  586. flex: 1;
  587. }
  588. </style>