receive.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
  4. <el-form-item label="物料名称" prop="materialName">
  5. <el-input
  6. v-model="queryParams.materialName"
  7. placeholder="请输入物料名称"
  8. clearable
  9. style="width: 240px"
  10. @keyup.enter.native="handleQuery"
  11. />
  12. </el-form-item>
  13. <el-form-item label="月/周数据" prop="monthOrWeek">
  14. <el-radio-group v-model="queryParams.monthOrWeek">
  15. <el-radio-button label="1">月</el-radio-button>
  16. <el-radio-button label="2">周</el-radio-button>
  17. </el-radio-group>
  18. </el-form-item>
  19. <el-form-item label="周期" prop="recordDate">
  20. <div v-if="queryParams.monthOrWeek==='1'">
  21. <el-date-picker
  22. v-model="queryParams.recordDate"
  23. type="month"
  24. value-format="yyyy-MM"
  25. placeholder="选择月份"
  26. @change="handleQuery"
  27. clearable>
  28. </el-date-picker>
  29. </div>
  30. <div v-if="queryParams.monthOrWeek==='2'">
  31. <el-date-picker
  32. v-model="queryParams.recordDate"
  33. type="week"
  34. format="yyyy 第 WW 周"
  35. placeholder="选择周"
  36. @change="handleQuery"
  37. clearable>
  38. </el-date-picker>
  39. </div>
  40. </el-form-item>
  41. <el-form-item>
  42. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  43. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  44. </el-form-item>
  45. </el-form>
  46. <el-row :gutter="10" style="margin-bottom: 8px">
  47. <el-col :span="1.5">
  48. <el-button
  49. type="primary"
  50. plain
  51. icon="el-icon-plus"
  52. size="mini"
  53. @click="handleAdd"
  54. v-hasPermi="['material:material:add']"
  55. >新增
  56. </el-button>
  57. </el-col>
  58. <el-col :span="1.5">
  59. <el-button
  60. plain
  61. icon="el-icon-download"
  62. size="mini"
  63. @click="handleExport"
  64. v-hasPermi="['material:material:add']"
  65. >导出
  66. </el-button>
  67. </el-col>
  68. </el-row>
  69. <el-table :data="materialList"
  70. border
  71. stripe
  72. size="mini">
  73. <el-table-column label="编号" prop="id"/>
  74. <el-table-column label="物料名称" prop="materialName" :show-overflow-tooltip="true"/>
  75. <el-table-column label="规格" prop="specification" :show-overflow-tooltip="true"/>
  76. <el-table-column label="品牌/货号" prop="articleNo" :show-overflow-tooltip="true"/>
  77. <el-table-column label="厂商" prop="factory"/>
  78. <el-table-column label="单位" prop="unit"/>
  79. <el-table-column label="领取量" prop="num"/>
  80. <el-table-column label="物料类型">
  81. <template slot-scope="scope">
  82. <el-tag v-if="scope.row.materialType==='1'" type="warning" size="mini">生产</el-tag>
  83. <el-tag v-else type="info" size="mini">非生产</el-tag>
  84. </template>
  85. </el-table-column>
  86. <el-table-column label="领用人" prop="receiveUserName"/>
  87. <el-table-column label="周期" prop="recordDate" width="155"/>
  88. <el-table-column label="操作" align="center" width="200">
  89. <template slot-scope="scope">
  90. <el-button
  91. size="mini"
  92. type="text"
  93. icon="el-icon-edit"
  94. @click="handleSplit(scope.row)"
  95. v-if="scope.row.monthOrWeek==='1'"
  96. v-hasPermi="['material:material:add']"
  97. >周数据
  98. </el-button>
  99. <el-button
  100. size="mini"
  101. type="text"
  102. icon="el-icon-edit"
  103. v-if="showEditBtn(scope.row)"
  104. @click="handleUpdate(scope.row)"
  105. v-hasPermi="['material:material:edit']"
  106. >修改
  107. </el-button>
  108. <el-button
  109. size="mini"
  110. type="text"
  111. icon="el-icon-delete"
  112. @click="handleDelete(scope.row)"
  113. v-hasPermi="['material:material:delete']"
  114. >删除
  115. </el-button>
  116. </template>
  117. </el-table-column>
  118. </el-table>
  119. <div style="margin-top: 10px;text-align: center">
  120. <el-pagination
  121. background
  122. @size-change="handleSizeChange"
  123. @current-change="handleCurrentChange"
  124. :current-page="queryParams.pageNum"
  125. :page-sizes="[10, 20, 50]"
  126. :page-size="queryParams.pageSize"
  127. layout="total, sizes, prev, pager, next, jumper"
  128. :total="total">
  129. </el-pagination>
  130. </div>
  131. <!-- 添加或修改物料配置对话框 -->
  132. <el-dialog :title="title" :visible.sync="open" @close="dialogClose" width="500px" append-to-body>
  133. <el-form ref="form" :model="form" :rules="rules" label-width="100px">
  134. <el-form-item label="数据周期">
  135. <div v-if="form.monthOrWeek==='1'">
  136. <el-date-picker
  137. v-model="form.recordDate"
  138. type="month"
  139. value-format="yyyy-MM"
  140. placeholder="选择月份"
  141. :picker-options="getPickerOptions('month')"
  142. clearable>
  143. </el-date-picker>
  144. </div>
  145. <div v-else>
  146. <el-date-picker
  147. v-model="form.recordDate"
  148. type="week"
  149. format="yyyy 第 WW 周"
  150. placeholder="选择周"
  151. :picker-options="getPickerOptions('week')"
  152. clearable>
  153. </el-date-picker>
  154. </div>
  155. </el-form-item>
  156. <el-form-item label="物料名称" prop="materialName">
  157. <el-input v-model="form.materialName" placeholder="请输入物料名称" :disabled="form.monthOrWeek==='2'"/>
  158. </el-form-item>
  159. <el-form-item label="物料规格" prop="specification">
  160. <el-input v-model="form.specification" placeholder="请输入物料规格" :disabled="form.monthOrWeek==='2'"/>
  161. </el-form-item>
  162. <el-form-item label="品牌/货号" prop="articleNo">
  163. <el-input v-model="form.articleNo" placeholder="请输入品牌/货号" :disabled="form.monthOrWeek==='2'"/>
  164. </el-form-item>
  165. <el-form-item label="厂商" prop="factory">
  166. <el-input v-model="form.factory" placeholder="请输入厂商" :disabled="form.monthOrWeek==='2'"/>
  167. </el-form-item>
  168. <el-form-item label="单位" prop="unit">
  169. <el-input v-model="form.unit" placeholder="请输入单位" :disabled="form.monthOrWeek==='2'"/>
  170. </el-form-item>
  171. <el-form-item label="领取量" prop="num">
  172. <el-input-number v-model="form.num" controls-position="right" :min="0" placeholder="请输入领取量"/>
  173. </el-form-item>
  174. <el-form-item label="物料类型" prop="materialType">
  175. <el-radio-group v-model="form.materialType" :disabled="form.monthOrWeek==='2'">
  176. <el-radio label="1">生产</el-radio>
  177. <el-radio label="2">非生产</el-radio>
  178. </el-radio-group>
  179. </el-form-item>
  180. <el-form-item label="备注">
  181. <el-input v-model="form.remark" type="textarea"/>
  182. </el-form-item>
  183. </el-form>
  184. <div slot="footer" class="dialog-footer">
  185. <el-button type="primary" @click="submitForm">确 定</el-button>
  186. <el-button @click="cancel">取 消</el-button>
  187. </div>
  188. </el-dialog>
  189. </div>
  190. </template>
  191. <script>
  192. import {
  193. listMaterial,
  194. getMaterial,
  195. delMaterial,
  196. addMaterial,
  197. updateMaterial,
  198. exportMaterial
  199. } from "@/api/material/material";
  200. import DateUtil from "@/utils/date"
  201. export default {
  202. name: "Receive",
  203. data() {
  204. return {
  205. // 总条数
  206. total: 0,
  207. // 物料表格数据
  208. materialList: [],
  209. // 弹出层标题
  210. title: "",
  211. // 是否显示弹出层
  212. open: false,
  213. // 查询参数
  214. queryParams: {
  215. pageNum: 1,
  216. pageSize: 10,
  217. materialName: undefined,
  218. factory: undefined,
  219. monthOrWeek: undefined,
  220. recordDate: undefined
  221. },
  222. // 表单参数
  223. form: {},
  224. // 表单校验
  225. rules: {
  226. materialName: [
  227. {required: true, message: "物料名称不能为空", trigger: "blur"}
  228. ],
  229. specification: [
  230. {required: true, message: "物料规格不能为空", trigger: "blur"}
  231. ],
  232. articleNo: [
  233. {required: true, message: "品牌/货号不能为空", trigger: "blur"}
  234. ],
  235. factory: [
  236. {required: true, message: "厂商不能为空", trigger: "blur"}
  237. ],
  238. unit: [
  239. {required: true, message: "单位不能为空", trigger: "blur"}
  240. ],
  241. num: [
  242. {required: true, message: "领取量不能为空", trigger: "blur"}
  243. ],
  244. materialType: [
  245. {required: true, message: "物料类型不能为空", trigger: "change"}
  246. ],
  247. monthOrWeek: [
  248. {required: true, message: "月/周数据不能为空", trigger: "change"}
  249. ]
  250. }
  251. };
  252. },
  253. created() {
  254. this.getList();
  255. },
  256. methods: {
  257. /** 查询物料列表 */
  258. getList() {
  259. listMaterial(this.queryParams).then(res => {
  260. this.materialList = res.data.records;
  261. this.total = res.data.total;
  262. })
  263. },
  264. // 取消按钮
  265. cancel() {
  266. this.open = false;
  267. this.reset();
  268. },
  269. // 对话框关闭回调
  270. dialogClose() {
  271. this.open = false;
  272. this.reset();
  273. },
  274. // 表单重置
  275. reset() {
  276. this.form = {
  277. id: undefined,
  278. materialName: undefined,
  279. specification: undefined,
  280. articleNo: undefined,
  281. factory: undefined,
  282. unit: undefined,
  283. num: undefined,
  284. materialType: undefined,
  285. monthOrWeek: undefined,
  286. remark: undefined
  287. };
  288. this.resetForm("form");
  289. },
  290. /** 搜索按钮操作 */
  291. handleQuery() {
  292. this.queryParams.pageNum = 1;
  293. this.queryParams.pageSize = 10;
  294. this.getList();
  295. },
  296. /** 重置按钮操作 */
  297. resetQuery() {
  298. this.$refs.queryForm.resetFields();
  299. this.handleQuery();
  300. },
  301. handleSizeChange(val) {
  302. this.pageSize = val;
  303. this.getList();
  304. },
  305. handleCurrentChange(val) {
  306. this.pageNum = val;
  307. this.getList();
  308. },
  309. getPickerOptions(type) {
  310. if (type === 'month') {
  311. return {
  312. disabledDate: time => time.getTime() < DateUtil.unix(DateUtil.afterMonth()) * 1000
  313. }
  314. }
  315. if (type === 'week') {
  316. return {
  317. disabledDate: time => time.getTime() < DateUtil.unix(DateUtil.afterWeek()) * 1000
  318. }
  319. }
  320. },
  321. showEditBtn(row) {
  322. if (row.monthOrWeek === '1') {
  323. if (DateUtil.getMinutes() < DateUtil.getMinutes(DateUtil.day(DateUtil.month() + '25'))) {
  324. return DateUtil.unix(row.recordDate) >= DateUtil.unix(DateUtil.afterMonth())
  325. } else {
  326. return DateUtil.unix(row.recordDate) >= DateUtil.unix(DateUtil.afterMonth())
  327. }
  328. } else {
  329. let split = row.recordDate.split("~");
  330. let date = split[0];
  331. let minutes = DateUtil.unix(date);
  332. let minutes1 = DateUtil.unix(DateUtil.afterWeek());
  333. return minutes >= minutes1
  334. }
  335. },
  336. /** 新增按钮操作 */
  337. handleAdd() {
  338. this.reset();
  339. this.form.monthOrWeek = '1'
  340. this.title = "添加月物料计划";
  341. this.open = true;
  342. },
  343. handleExport() {
  344. exportMaterial(this.queryParams)
  345. },
  346. /** 周数据填报操作 */
  347. handleSplit(row) {
  348. this.form = _.cloneDeep(row);
  349. this.form.parentId = row.id;
  350. this.form.id = undefined;
  351. this.form.num = undefined;
  352. this.form.monthOrWeek = '2'
  353. this.form.recordDate = DateUtil.day()
  354. this.title = "添加周物料计划";
  355. this.open = true;
  356. },
  357. /** 修改按钮操作 */
  358. handleUpdate(row) {
  359. this.reset();
  360. getMaterial(row.id).then(res => {
  361. this.form = res.data;
  362. if (this.form.monthOrWeek === '2') {
  363. this.form.recordDate = this.form.recordDate.split("~")[0]
  364. }
  365. this.open = true;
  366. this.title = "修改物料计划";
  367. });
  368. },
  369. /** 提交按钮 */
  370. submitForm() {
  371. this.$refs["form"].validate(valid => {
  372. if (valid) {
  373. if (this.form.id != undefined) {
  374. updateMaterial(this.form).then(res => {
  375. this.$message.success("修改成功");
  376. this.open = false;
  377. this.getList();
  378. });
  379. } else {
  380. addMaterial(this.form).then(res => {
  381. this.$message.success("新增成功");
  382. this.open = false;
  383. this.getList();
  384. });
  385. }
  386. }
  387. });
  388. },
  389. /** 删除按钮操作 */
  390. handleDelete(row) {
  391. this.$confirm('是否确认删除编号为"' + row.id + '"的数据项?').then(() => {
  392. return delMaterial(row.id);
  393. }).then(() => {
  394. this.getList();
  395. this.$message.success("删除成功");
  396. }).catch(() => {
  397. });
  398. },
  399. }
  400. };
  401. </script>