receive.vue 12 KB

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