detail.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392
  1. <template>
  2. <div class="purchaseOrderDetail pagePadding">
  3. <div
  4. style="width: 100%"
  5. v-if="powers && powers.length > 0 && powers.some((item) => item == '001')"
  6. >
  7. <p>{{ status }}---{{ powers }}</p>
  8. <div class="detail-page-title">
  9. <span>采购单编号:</span><span>{{ queryId }}---{{ sitem.bkcode }}</span>
  10. <el-button
  11. type="primary"
  12. :size="'mini'"
  13. class="fr"
  14. v-if="
  15. (status === '1' || status === '2') &&
  16. powers.some((item) => item == '007')
  17. "
  18. style="margin: 0 0 0 12px"
  19. @click="diffAdd = true"
  20. >填写总工差</el-button
  21. >
  22. </div>
  23. <status-bar
  24. v-if="newTime !== ''"
  25. :newTime="newTime"
  26. :options="statusOptions"
  27. :status="status"
  28. />
  29. <el-tabs v-model="activeTabs">
  30. <el-tab-pane label="业务详情" name="1">
  31. <el-collapse v-model="activeNames" style="margin: -18px 0 0 0">
  32. <el-collapse-item title="采购单信息" name="1">
  33. <show-data-table
  34. :newTime="newTime"
  35. v-if="newTime !== ''"
  36. :sitem="sitem"
  37. :columns="ShowDataTableColumns"
  38. >
  39. <template slot="supplier_name">
  40. <span>{{ sitem.supplier_name }}</span>
  41. <el-popover placement="top" width="300" trigger="hover">
  42. <ul>
  43. <li>
  44. <span>销售方编号:</span
  45. ><span>{{ sitem.supplierNo }}</span>
  46. </li>
  47. </ul>
  48. <i class="el-icon-warning-outline fr" slot="reference"></i>
  49. </el-popover>
  50. </template>
  51. <template slot="supplier_name1">
  52. <span>{{ sitem.supplier_name }}</span>
  53. <el-popover placement="top" width="300" trigger="hover">
  54. <ul>
  55. <li>
  56. <span>销售方编号:</span
  57. ><span>{{ sitem.supplierNo }}</span>
  58. </li>
  59. </ul>
  60. <i class="el-icon-warning-outline fr" slot="reference"></i>
  61. </el-popover>
  62. </template>
  63. <template slot="good_name">
  64. <span v-if="sitem.goodinfo">
  65. <img
  66. style="display: inline-block; width: 20px; height: 20px"
  67. class="hover fl"
  68. v-viewer
  69. v-if="sitem.goodinfo.good_thumb_img"
  70. :src="sitem.goodinfo.good_thumb_img"
  71. alt=""
  72. />
  73. <span style="padding: 0 0 0 5px">{{
  74. sitem.goodinfo.good_name
  75. }}</span>
  76. <span
  77. v-for="(si, sii) in sitem.goodinfo.speclist"
  78. :key="sii + si.id"
  79. >
  80. <span>{{ sii === 0 ? "_" : "--" }}</span
  81. ><span>{{ si.spec_name }}[{{ si.spec_value }}]</span>
  82. </span>
  83. <el-popover placement="top" width="300" trigger="hover">
  84. <ul>
  85. <li>
  86. <span>商品编号:</span
  87. ><span>{{ sitem.spuCode }}</span>
  88. </li>
  89. </ul>
  90. <i
  91. class="el-icon-warning-outline fr my-class"
  92. slot="reference"
  93. ></i>
  94. </el-popover>
  95. </span>
  96. </template>
  97. <template slot="brand_name">
  98. <span v-if="sitem.goodinfo">{{
  99. sitem.goodinfo.brand_name
  100. }}</span>
  101. </template>
  102. <template slot="exclusive">
  103. <span
  104. v-if="
  105. sitem.goodinfo &&
  106. sitem.goodinfo.exclusive &&
  107. sitem.goodinfo.exclusive.length > 0
  108. "
  109. >
  110. <span
  111. v-for="(si, sii) in sitem.goodinfo.exclusive"
  112. :key="si.id + sii"
  113. >
  114. <span v-if="sii !== 0">/</span><span>{{ si.name }}</span>
  115. </span> </span
  116. ><span v-else>--</span>
  117. </template>
  118. <template slot="weight">
  119. <span v-if="sitem.goodinfo">{{ sitem.goodinfo.weight }}</span
  120. >/g
  121. </template>
  122. <template slot="status">
  123. <el-tag
  124. :size="'mini'"
  125. :type="sitem.status == '0' ? 'warning' : ''"
  126. v-text="
  127. (
  128. statusOptions.find(
  129. (item) => item.value == sitem.status
  130. ) || {}
  131. ).label || '--'
  132. "
  133. ></el-tag>
  134. </template>
  135. <template slot="wsm">
  136. <span>{{ sitem.wsm_supplier }}/{{ sitem.wsm_name }}</span>
  137. <el-popover placement="top" width="300" trigger="hover">
  138. <ul>
  139. <li>
  140. <span>仓库公司编号:</span
  141. ><span>{{ sitem.wsm_supplierNo }}</span>
  142. </li>
  143. <li>
  144. <span>仓库名称编号:</span
  145. ><span>{{ sitem.wsm_code }}</span>
  146. </li>
  147. </ul>
  148. <i class="el-icon-warning-outline fr" slot="reference"></i>
  149. </el-popover>
  150. </template>
  151. <template slot="remark">
  152. <span v-if="sitem.goodinfo && sitem.goodinfo.noble_metal"
  153. >{{
  154. sitem.goodinfo.noble_weight
  155. ? sitem.goodinfo.noble_weight
  156. : "0"
  157. }}g-{{ sitem.goodinfo.noble_name }}-{{
  158. sitem.goodinfo.gold_price
  159. ? sitem.goodinfo.gold_price
  160. : "0"
  161. }}元/g-{{
  162. sitem.goodinfo.is_gold_price === "0" ? "不" : ""
  163. }}启用实时金价-{{
  164. sitem.goodinfo.is_diff === "1" ? "有" : "无"
  165. }}工差-{{ sitem.goodinfo.config }}-{{
  166. sitem.goodinfo.other_config
  167. }}</span
  168. >
  169. </template>
  170. </show-data-table>
  171. </el-collapse-item>
  172. <el-collapse-item title="入库单" name="2">
  173. <order-in-table
  174. :newTime="newTime"
  175. v-if="newTime !== ''"
  176. :sitem="sitem"
  177. :id="queryId"
  178. @refresh="initData()"
  179. />
  180. </el-collapse-item>
  181. <el-collapse-item title="工差单" name="3">
  182. <work-diff-table></work-diff-table>
  183. </el-collapse-item>
  184. </el-collapse>
  185. </el-tab-pane>
  186. <el-tab-pane label="审批记录" name="2">
  187. <process-time-line
  188. v-if="newTime !== ''"
  189. :newTime="newTime"
  190. :type="'CGD'"
  191. :orderCode="orderCode"
  192. />
  193. </el-tab-pane>
  194. </el-tabs>
  195. <diff-order-add
  196. :sitem="sitem"
  197. :show-model="diffAdd"
  198. @refresh="initData"
  199. @cancel="diffAdd = false"
  200. />
  201. <order-addedit-model
  202. :id="modelId"
  203. :show-model="showModel"
  204. :sitem="detailSitem"
  205. @refresh="initData()"
  206. @cancel="showModel = false"
  207. />
  208. </div>
  209. <div v-else>
  210. <no-auth></no-auth>
  211. </div>
  212. </div>
  213. </template>
  214. <script>
  215. import mixinPage from "@/mixins/elPaginationHandle";
  216. import resToken from "@/mixins/resToken";
  217. import asyncRequest from "@/apis/service/purchaseIn/purchaseOrder";
  218. import orderInTable from "./components/order-in-table";
  219. import ShowDataTableColumns from "./components/ShowDataTableColumns";
  220. import orderAddeditModel from "./components/order-addedit-model";
  221. export default {
  222. name: "purchaseOrderDetail",
  223. mixins: [mixinPage, resToken],
  224. components: {
  225. orderInTable,
  226. orderAddeditModel,
  227. },
  228. computed: {
  229. powers() {
  230. let tran =
  231. this.$store.getters.btnList.find(
  232. (item) => item.menu_route == "purchaseOrderDetail"
  233. ) || {};
  234. if (tran && tran.action && tran.action.length > 0) {
  235. return tran.action;
  236. } else {
  237. return [];
  238. }
  239. },
  240. },
  241. data() {
  242. return {
  243. activeTabs: "1",
  244. detailSitem: null,
  245. modelId: "",
  246. showModel: false,
  247. ShowDataTableColumns: ShowDataTableColumns,
  248. isMetal: false,
  249. finishStatus: "finish",
  250. activeNames: ["0", "1", "2", "3", "4", "5", "10"],
  251. sitem: null,
  252. statusOptions: [
  253. { value: "1", label: "待发货" },
  254. { value: "2", label: "部分发货" },
  255. { value: "3", label: "发货完成" },
  256. { value: "4", label: "已取消订单" },
  257. ],
  258. statusList: [
  259. {
  260. code: "1",
  261. label: "待发货",
  262. },
  263. {
  264. code: "2",
  265. label: "部分发货",
  266. },
  267. {
  268. code: "3",
  269. label: "发货完成",
  270. },
  271. { value: "4", label: "已取消订单" },
  272. ],
  273. status: "",
  274. newTime: "",
  275. loading: false,
  276. queryId: "",
  277. diffAdd: false,
  278. orderCode: "",
  279. ReturnAddModel: false, //采购单退货弹窗
  280. };
  281. },
  282. mounted() {
  283. this.queryId = this.$route.query.id;
  284. this.initData();
  285. },
  286. methods: {
  287. getNewTime() {
  288. this.newTime = new Date().valueOf();
  289. },
  290. addForm() {
  291. this.detailSitem = this.sitem;
  292. this.modelId = this.id;
  293. this.showModel = true;
  294. },
  295. openModal() {
  296. this.diffAdd = true;
  297. this.ReturnAddModel = true;
  298. },
  299. async examForm(e) {
  300. if (!this.loading) {
  301. let type = e.state === "1" ? "2" : "0";
  302. await this.setStatus(type, "提交入库方审核", e.remark);
  303. }
  304. },
  305. async initData() {
  306. this.loading = true;
  307. const res = await asyncRequest.detail({ cgdNo: this.queryId });
  308. if (res && res.code === 0 && res.data) {
  309. this.sitem = res.data;
  310. const { status, can, cgdNo } = this.sitem;
  311. this.status = status;
  312. this.orderCode = cgdNo;
  313. if (can && can.length > 0) {
  314. this.sitem.class_cat = "";
  315. can.forEach((x, i) => {
  316. this.sitem.class_cat += i === 0 ? x.name : "/" + x.name;
  317. });
  318. }
  319. this.getNewTime();
  320. } else if (res && res.code >= 100 && res.code <= 104) {
  321. await this.logout();
  322. } else {
  323. this.$message.warning(res.message);
  324. }
  325. this.loading = false;
  326. },
  327. async statusConfirm(status, message) {
  328. await this.$confirm(`确定要${message}?`, {
  329. confirmButtonText: "确定",
  330. cancelButtonText: "取消",
  331. type: "warning",
  332. })
  333. .then(async () => {
  334. if (status === "-1") {
  335. await this.deleteById(message);
  336. } else {
  337. await this.setStatus(status, message);
  338. }
  339. })
  340. .catch(() => {
  341. console.log("取消");
  342. });
  343. },
  344. async deleteById(message) {
  345. const res = await asyncRequest.delete({ id: this.queryId });
  346. if (res && res.code === 0) {
  347. this.$notify.success({
  348. title: message + "成功!",
  349. message: "",
  350. });
  351. this.routeGoto("check", {});
  352. } else if (res && res.code >= 100 && res.code <= 104) {
  353. await this.logout();
  354. } else {
  355. this.$message.warning(res.message);
  356. }
  357. },
  358. async setStatus(status, message, remark) {
  359. let model = {
  360. cgdNo: this.sitem.cgdNo,
  361. remark: remark || "",
  362. status: status,
  363. };
  364. const res = await asyncRequest.status(model);
  365. this.loading = false;
  366. if (res && res.code === 0) {
  367. this.$notify.success({
  368. title: message + "成功!",
  369. message: "",
  370. });
  371. await this.initData();
  372. } else if (res && res.code >= 100 && res.code <= 104) {
  373. await this.logout();
  374. } else {
  375. this.$message.warning(res.message);
  376. }
  377. },
  378. },
  379. };
  380. </script>
  381. <style lang="scss" scoped>
  382. .purchaseOrderDetail {
  383. }
  384. </style>