detail.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. <template>
  2. <div class="salesOrderDetail pagePadding">
  3. <div
  4. style="width: 100%"
  5. v-if="powers && powers.length > 0 && powers.some((item) => item == '001')"
  6. >
  7. <div style="height: 30px">
  8. <span>订单编号:</span><span v-if="sitem">{{ sitem.orderCode }}</span>
  9. <!-- v-if="status === '4' && powers.some((item) => item == '051')" -->
  10. <el-button
  11. style="margin: 0 0 0 10px"
  12. class="fr"
  13. type="primary"
  14. :size="'mini'"
  15. @click="openModal()"
  16. >新建销售退货单
  17. </el-button>
  18. <el-button
  19. style="margin: 0 0 0 10px"
  20. class="fr"
  21. type="primary"
  22. :size="'mini'"
  23. @click="setShowModel=true"
  24. >设置部分字段
  25. </el-button>
  26. </div>
  27. <el-tabs v-model="activeTabs">
  28. <el-tab-pane label="新建销售订单" name="0" v-if="queryType === 'add'">
  29. <add-form
  30. :newTime="newTime"
  31. v-if="newTime !== ''"
  32. :type="queryType"
  33. :sitem="sitem"
  34. :id="queryId"
  35. @refresh="routeReGoto('salesOrder', {})"
  36. />
  37. </el-tab-pane>
  38. <el-tab-pane label="业务详情" name="1" v-if="queryType !== 'add'">
  39. <el-collapse v-model="activeNames" style="margin: -18px 0 0 0">
  40. <el-collapse-item title="销售订单信息" name="-1">
  41. <show-data-table
  42. style="margin: 0; padding: 0"
  43. :sitem="sitem"
  44. v-if="status"
  45. :columns="showColumns"
  46. >
  47. <template slot="status">
  48. <el-tag
  49. :size="'mini'"
  50. v-text="
  51. (
  52. statusOptions.find(
  53. (item) => item.value == sitem.status
  54. ) || {}
  55. ).label || '--'
  56. "
  57. ></el-tag>
  58. </template>
  59. <template slot="order_type">
  60. <el-tag
  61. :size="'mini'"
  62. v-text="
  63. (
  64. orderOptions.find(
  65. (item) => item.id == sitem.order_type
  66. ) || {}
  67. ).label || '--'
  68. "
  69. ></el-tag>
  70. </template>
  71. <template slot="supplierName">
  72. <span>{{ sitem.supplierName }}</span>
  73. <el-popover placement="top" width="300" trigger="hover">
  74. <ul>
  75. <li>
  76. <span>销售方公司编号:</span
  77. ><span>{{ sitem.supplierNo }}</span>
  78. </li>
  79. </ul>
  80. <i class="el-icon-warning-outline fr" slot="reference"></i>
  81. </el-popover>
  82. </template>
  83. <template slot="companyName">
  84. <span>{{ sitem.companyName }}</span>
  85. <el-popover placement="top" width="300" trigger="hover">
  86. <ul>
  87. <li>
  88. <span>购买方公司编号:</span
  89. ><span>{{ sitem.companyNo }}</span>
  90. </li>
  91. </ul>
  92. <i class="el-icon-warning-outline fr" slot="reference"></i>
  93. </el-popover>
  94. </template>
  95. <template slot="is_active">
  96. <span v-if="sitem.order_type === '1'"
  97. ><span
  98. >{{
  99. sitem.is_activity === "1" ? "参与活动" : "不参与活动"
  100. }}/{{ sitem.good_type }}</span
  101. ></span
  102. >
  103. <span v-else>--</span>
  104. </template>
  105. <template slot="send_type">
  106. <el-tag :size="'mini'">{{
  107. sitem.send_type === "1"
  108. ? "直接发货"
  109. : sitem.send_type === "2"
  110. ? "延迟发货"
  111. : "--"
  112. }}</el-tag>
  113. </template>
  114. </show-data-table>
  115. </el-collapse-item>
  116. <el-collapse-item title="商品信息" name="2">
  117. <show-goods-data-table
  118. :newTime="newTime"
  119. v-if="newTime !== ''"
  120. :type="sitem.order_type"
  121. :skucode="sitem.skuCode"
  122. :spucode="sitem.good_code"
  123. />
  124. </el-collapse-item>
  125. <el-collapse-item title="发货申请" name="3">
  126. <order-out-table
  127. :newTime="newTime"
  128. v-if="newTime !== ''"
  129. :sitem="sitem"
  130. :id="queryId"
  131. @refresh="initData()"
  132. />
  133. </el-collapse-item>
  134. </el-collapse>
  135. </el-tab-pane>
  136. <el-tab-pane label="审批记录" name="2" v-if="queryType !== 'add'">
  137. <process-time-line
  138. v-if="newTime !== ''"
  139. :newTime="newTime"
  140. :type="'XSQRD'"
  141. :orderCode="queryId"
  142. />
  143. </el-tab-pane>
  144. </el-tabs>
  145. <add-model
  146. :id="modelId"
  147. :sitem="s_sitem"
  148. :show-model="showModel"
  149. :is-detail="isDetail"
  150. @refresh="searchList"
  151. @cancel="showModel = false"
  152. />
  153. <!-- <edit-add
  154. :id="modelId"
  155. :sitem="sitem"
  156. :show-model="showModell"
  157. :is-detail="isDetail"
  158. @refresh="searchList"
  159. @cancel="showModel = false"
  160. /> -->
  161. <set-partial
  162. :sitem="sitem"
  163. :show-model="setShowModel"
  164. @refresh="initData"
  165. @cancel="setShowModel = false"
  166. />
  167. </div>
  168. <div v-else>
  169. <no-auth></no-auth>
  170. </div>
  171. </div>
  172. </template>
  173. <script>
  174. import mixinPage from "@/mixins/elPaginationHandle";
  175. import resToken from "@/mixins/resToken";
  176. import asyncRequest from "@/apis/service/sellOut/salesOrder/detail";
  177. import addForm from "./components/addForm";
  178. import orderOutTable from "./components/order-out-table";
  179. import addModel from "@/views/sellOut/sellReturn/components/addModel";
  180. import { showColumns } from "./components/ShowDataTableColumns";
  181. import setPartial from "./setPartial";
  182. export default {
  183. name: "salesOrderDetail",
  184. mixins: [mixinPage, resToken],
  185. components: {
  186. addModel,
  187. addForm,
  188. orderOutTable,
  189. setPartial,
  190. },
  191. computed: {
  192. powers() {
  193. let tran =
  194. this.$store.getters.btnList.find(
  195. (item) => item.menu_route == "salesOrderDetail"
  196. ) || {};
  197. if (tran && tran.action && tran.action.length > 0) {
  198. return tran.action;
  199. } else {
  200. return [];
  201. }
  202. },
  203. },
  204. data() {
  205. return {
  206. finishStatus: "finish",
  207. activeTabs: "1",
  208. activeNames: ["-1", "0", "1", "2", "3", "4", "5", "6"],
  209. showColumns: showColumns,
  210. setShowModel:false,
  211. orderOptions: [
  212. { id: "1", label: "线上商品销售" },
  213. { id: "2", label: "项目线上商品销售" },
  214. { id: "3", label: "咨询单销售" },
  215. { id: "4", label: "项目咨询单销售" },
  216. ],
  217. statusOptions: [
  218. { value: "0", label: "待发货" },
  219. { value: "1", label: "待发货完成" },
  220. { value: "2", label: "发货已完成" },
  221. { value: "3", label: "订单已取消" },
  222. ],
  223. sitem: null,
  224. s_sitem: null,
  225. orderCode: "",
  226. status: "",
  227. newTime: "",
  228. loading: false,
  229. queryId: "",
  230. queryType: "",
  231. };
  232. },
  233. mounted() {
  234. this.status = "";
  235. const { id, type } = this.$route.query;
  236. this.queryId = id;
  237. this.queryType = type;
  238. this.activeTabs = type === "add" ? "0" : "1";
  239. this.loading = true;
  240. if (this.queryType === "add") {
  241. this.sitem = {};
  242. this.getNewTime();
  243. } else {
  244. this.initData();
  245. }
  246. this.loading = false;
  247. },
  248. methods: {
  249. async statusConfirm(status, message) {
  250. await this.$confirm(`确定要${message}?`, {
  251. confirmButtonText: "确定",
  252. cancelButtonText: "取消",
  253. type: "warning",
  254. })
  255. .then(async () => {
  256. if (status === "-1") {
  257. await this.deleteById(message);
  258. } else {
  259. await this.setStatus(status, message);
  260. }
  261. })
  262. .catch(() => {
  263. console.log("取消");
  264. });
  265. },
  266. getNewTime() {
  267. this.newTime = new Date().valueOf() + "";
  268. },
  269. async deleteById(message) {
  270. const res = await asyncRequest.delete({ id: this.queryId });
  271. if (res && res.code === 0) {
  272. this.$notify.success({
  273. title: message + "成功!",
  274. message: "",
  275. });
  276. this.routeGoto("check", {});
  277. } else if (res && res.code >= 100 && res.code <= 104) {
  278. await this.logout();
  279. } else {
  280. this.$message.warning(res.message);
  281. }
  282. },
  283. async setStatus(status, message, remark) {
  284. let model = {
  285. id: this.queryId,
  286. remark: remark || "",
  287. status: status,
  288. };
  289. const res = await asyncRequest.status(model);
  290. this.loading = false;
  291. if (res && res.code === 0) {
  292. this.$notify.success({
  293. title: message + "成功!",
  294. message: "",
  295. });
  296. this.initData();
  297. } else if (res && res.code >= 100 && res.code <= 104) {
  298. await this.logout();
  299. } else {
  300. this.$message.warning(res.message);
  301. }
  302. },
  303. async examForm(e) {
  304. if (!this.loading) {
  305. let type = e.state === "1" ? "2" : "0";
  306. await this.setStatus(type, "提交入库方审核", e.remark);
  307. }
  308. },
  309. async initData() {
  310. this.loading = true;
  311. const res = await asyncRequest.detail({ id: this.queryId });
  312. if (res && res.code === 0 && res.data) {
  313. this.sitem = res.data;
  314. this.status = this.sitem.status;
  315. this.orderCode = this.sitem.orderCode;
  316. this.getNewTime();
  317. } else if (res && res.code >= 100 && res.code <= 104) {
  318. await this.logout();
  319. } else {
  320. this.$message.warning(res.message);
  321. }
  322. this.loading = false;
  323. },
  324. openModal() {
  325. this.modelId = "add";
  326. this.s_sitem = this.sitem;
  327. this.showModel = true;
  328. },
  329. },
  330. };
  331. </script>
  332. <style lang="scss" scoped>
  333. .salesOrderDetail {
  334. }
  335. </style>