main.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. <template>
  2. <div>
  3. <show-data-table
  4. :newTime="newTime"
  5. v-if="newTime !== '' && sitem"
  6. :sitem="sitem"
  7. :columns="columns"
  8. >
  9. <template slot="company">
  10. <span>{{ sitem.company }}</span>
  11. <el-popover placement="top" width="300" trigger="hover">
  12. <ul>
  13. <li>
  14. <span>销售方公司编号:</span><span>{{ sitem.companyNo }}</span>
  15. </li>
  16. </ul>
  17. <i class="el-icon-warning-outline fr" slot="reference"></i>
  18. </el-popover>
  19. </template>
  20. <template slot="khName">
  21. <span>{{ sitem.khName }}</span>
  22. <el-popover placement="top" width="300" trigger="hover">
  23. <ul>
  24. <li>
  25. <span>购买方公司编号:</span><span>{{ sitem.khNo }}</span>
  26. </li>
  27. </ul>
  28. <i class="el-icon-warning-outline fr" slot="reference"></i>
  29. </el-popover>
  30. </template>
  31. <template slot="ladder">
  32. <el-table
  33. :data="sitem.ladder"
  34. :size="'mini'"
  35. border
  36. stripe
  37. style="width: 100%"
  38. >
  39. <el-table-column label="商品阶梯" width="70px">
  40. <template slot-scope="scope">
  41. {{ scope.$index + 1 }}</template
  42. >
  43. </el-table-column>
  44. <el-table-column prop="good_type" label="商品类型" width="80px">
  45. <template slot-scope="scope">
  46. <el-tag
  47. :size="'mini'"
  48. v-text="
  49. (
  50. statusOptions.find(
  51. (item) => item.value == scope.row.good_type
  52. ) || {}
  53. ).label || '--'
  54. "
  55. ></el-tag
  56. ></template>
  57. </el-table-column>
  58. <el-table-column
  59. prop="budget_price"
  60. label="预算单价"
  61. width="110"
  62. />
  63. <el-table-column prop="num" label="购买数量" width="110" />
  64. <el-table-column prop="cat_name" label="商品分类" />
  65. <el-table-column prop="good_img" label="图片" width="50">
  66. <template slot-scope="scope">
  67. <div
  68. v-if="scope.row.good_img"
  69. style="width: 20px; height: 20px"
  70. class="hover"
  71. v-viewer
  72. >
  73. <img
  74. :src="scope.row.good_img"
  75. style="display: inline-block; width: 100%; height: 100%"
  76. alt=""
  77. />
  78. </div>
  79. </template>
  80. </el-table-column>
  81. <el-table-column prop="good_name" label="商品名称" />
  82. </el-table>
  83. </template>
  84. <template slot="wsm">
  85. <span>{{ sitem.wsm_supplier }}/{{ sitem.wsm_name }}</span>
  86. <el-popover placement="top" width="300" trigger="hover">
  87. <ul>
  88. <li>
  89. <span>仓库公司编号:</span><span>{{ sitem.wsm_supplierNo }}</span>
  90. </li>
  91. <li>
  92. <span>仓库名称编号:</span><span>{{ sitem.wsm_code }}</span>
  93. </li>
  94. </ul>
  95. <i class="el-icon-warning-outline fr" slot="reference"></i>
  96. </el-popover>
  97. </template>
  98. </show-data-table>
  99. <div class="project-setPlan-title">
  100. 销售业务项目方案
  101. <span
  102. style="margin: 0 0 0 50px; font-size: 13px; color: #e4393c"
  103. v-if="total !== 0 && table_type === 'list'"
  104. >{{ plan_show.status === "1" ? "已选定" : "" }}方案总金额:{{
  105. plan_show.sale_total
  106. }}元</span
  107. >
  108. </div>
  109. <div class="project-setPlan-backGood-table">
  110. <el-table
  111. :data="plan_show.feedback"
  112. :size="'mini'"
  113. border
  114. stripe
  115. :ref="'multipleTable' + index"
  116. style="width: 100%"
  117. >
  118. <el-table-column
  119. prop="pgNo"
  120. label="要求编码"
  121. width="155px"
  122. show-overflow-tooltip
  123. />
  124. <el-table-column
  125. prop="origin_sale_price"
  126. label="系统售价单价"
  127. width="110"
  128. show-overflow-tooltip
  129. />
  130. <el-table-column
  131. prop="new_sale_price"
  132. label="当前销售单价"
  133. width="110"
  134. show-overflow-tooltip
  135. >
  136. <template slot-scope="scope">
  137. <digital-input
  138. v-if="table_type === 'add'"
  139. :values="scope.row.new_sale_price"
  140. :placeholder="'售价'"
  141. :min="scope.row.new_sale_price"
  142. :max="100000000000"
  143. :position="'right'"
  144. :precision="2"
  145. :size="'mini'"
  146. :controls="false"
  147. :append="''"
  148. @reschange="
  149. moq_num_change($event, scope.$index, 'new_sale_price')
  150. "
  151. />
  152. <span v-else>{{ scope.row.sale_price }}元</span>
  153. </template>
  154. </el-table-column>
  155. <el-table-column
  156. prop="origin_num"
  157. label="竞价数量"
  158. width="110"
  159. show-overflow-tooltip
  160. />
  161. <el-table-column
  162. prop="num"
  163. label="购买数量"
  164. width="110"
  165. show-overflow-tooltip
  166. >
  167. <template slot-scope="scope">
  168. <digital-input
  169. v-if="table_type === 'add'"
  170. :values="scope.row.origin_num"
  171. :placeholder="'购买数量'"
  172. :min="scope.row.origin_num"
  173. :max="100000000000"
  174. :position="'right'"
  175. :precision="0"
  176. :size="'mini'"
  177. :controls="false"
  178. :append="''"
  179. @reschange="moq_num_change($event, scope.$index, 'num')"
  180. />
  181. <span v-else>{{ scope.row.num }}</span>
  182. </template>
  183. </el-table-column>
  184. <el-table-column prop="data_source" label="商品来源" width="85">
  185. <template slot-scope="scope">
  186. <el-tag
  187. :size="'mini'"
  188. :type="scope.row.data_source === '1' ? 'success' : ''"
  189. >{{
  190. scope.row.data_source === "1" ? "平台商品" : "采反商品"
  191. }}</el-tag
  192. >
  193. </template>
  194. </el-table-column>
  195. <el-table-column
  196. prop="good_img"
  197. label="商品图片"
  198. min-width="242px"
  199. show-overflow-tooltip
  200. >
  201. <template slot-scope="scope">
  202. <div v-if="scope.row.good_img && scope.row.good_img.length > 0">
  203. <img
  204. v-for="(si, sii) in scope.row.good_img"
  205. :key="si + sii"
  206. :src="si"
  207. class="hover fl"
  208. style="
  209. display: inline-block;
  210. width: 20px;
  211. height: 20px;
  212. margin: 0 2px 0 0;
  213. "
  214. alt=""
  215. v-viewer
  216. />
  217. </div>
  218. </template>
  219. </el-table-column>
  220. <el-table-column
  221. prop="good_name"
  222. label="商品名称"
  223. min-width="120"
  224. show-overflow-tooltip
  225. >
  226. <template slot-scope="scope">
  227. <span>{{ scope.row.good_name }}</span>
  228. <span v-for="(si, sii) in scope.row.specinfo" :key="si.id + sii">
  229. {{ sii === 0 ? "_" : "-" }}{{ si.spec_name }}[{{
  230. si.spec_value_name
  231. }}]
  232. </span>
  233. </template>
  234. </el-table-column>
  235. <el-table-column
  236. prop="class_cat"
  237. label="商品分类"
  238. show-overflow-tooltip
  239. />
  240. <!-- <el-table-column
  241. prop="expiry_day"
  242. label="信息有效期"
  243. width="85"
  244. show-overflow-tooltip
  245. />
  246. <el-table-column
  247. prop="work_day"
  248. label="制作工期"
  249. width="70"
  250. show-overflow-tooltip
  251. />
  252. <el-table-column
  253. prop="delivery_day"
  254. label="物流时间"
  255. width="70"
  256. show-overflow-tooltip
  257. /> -->
  258. </el-table>
  259. </div>
  260. </div>
  261. </template>
  262. <script>
  263. import {columns, statusOptions,} from "./columns";
  264. import { cg_order_type_options } from "@/assets/js/statusList";
  265. //————————————————
  266. import mixinPage from "@/mixins/elPaginationHandle";
  267. import resToken from "@/mixins/resToken";
  268. import asyncRequest from "@/apis/service/sellOut/project";
  269. export default {
  270. mixins: [mixinPage, resToken],
  271. props:["queryId"],
  272. data() {
  273. return {
  274. cg_order_type_options,
  275. statusOptions,
  276. cost_detailArr: [],
  277. allPlanList: [],
  278. index: 0,
  279. total: 0,
  280. table_type: "list",
  281. ladder: [],
  282. plan_show: {
  283. sale_total: "0",
  284. feedback: [],
  285. },
  286. projectNo: "",
  287. status: "",
  288. //——————————————————————
  289. columns,
  290. newTime: "",
  291. sitem:null,
  292. loading:false,
  293. };
  294. },
  295. mounted(){
  296. this.initData()
  297. this.get_plan("1")
  298. },
  299. methods:{
  300. getNewTime() {
  301. this.newTime = new Date().valueOf();
  302. },
  303. async initData() {
  304. this.loading = true;
  305. const { code, message, data } = await asyncRequest.detail({
  306. projectNo: this.queryId,
  307. });
  308. this.loading = false;
  309. console.log(data);
  310. if (code === 0) {
  311. this.sitem = JSON.parse(JSON.stringify(data));
  312. const { status } = this.sitem;
  313. this.status = status;
  314. this.sitem.ladder.forEach((e) => {
  315. e.cat_name = "";
  316. const { cat_info } = e;
  317. if (cat_info && cat_info.length > 0) {
  318. cat_info.forEach((b, bi) => {
  319. e.cat_name += bi !== 0 ? "_" + b.name : b.name;
  320. });
  321. }
  322. });
  323. this.getNewTime();
  324. } else if (code >= 100 && code <= 104) {
  325. await this.logout();
  326. } else {
  327. this.$message.warning(message);
  328. }
  329. },
  330. //获取全部方案
  331. async get_plan(type) {
  332. let model = {
  333. projectNo: this.queryId,
  334. };
  335. const { code, data, message } = await asyncRequest.get_project_plan(
  336. model
  337. );
  338. if (code === 0) {
  339. this.allPlanList = JSON.parse(JSON.stringify(data));
  340. this.total = this.allPlanList.length;
  341. if (type && this.allPlanList.length > 0) {
  342. await this.change_plan("1");
  343. }
  344. } else if (code >= 100 && code <= 104) {
  345. await this.logout();
  346. } else {
  347. this.$message.warning(message);
  348. }
  349. },
  350. //切换当前展示的方案
  351. async change_plan(type) {
  352. this.table_type = "list";
  353. this.plan_show = {
  354. sale_total: "0",
  355. status: "0",
  356. feedback: [],
  357. };
  358. if (type) {
  359. this.index = 0;
  360. }
  361. if (this.status === "4") {
  362. this.allPlanList.forEach((a, ai) => {
  363. if (a.status === "1") {
  364. this.index = ai;
  365. }
  366. });
  367. }
  368. const { sale_total, feedback, status } = JSON.parse(
  369. JSON.stringify(this.allPlanList[this.index])
  370. );
  371. this.plan_show = {
  372. sale_total: sale_total,
  373. status: status,
  374. feedback: JSON.parse(JSON.stringify(feedback)),
  375. };
  376. this.plan_show.feedback.map((v) => {
  377. v.class_cat = "";
  378. if (v.cat_info && v.cat_info.length > 0) {
  379. v.cat_info.forEach((x, i) => {
  380. v.class_cat += i === 0 ? x.name : "_" + x.name;
  381. });
  382. }
  383. if (v.good_img) {
  384. v.good_img =
  385. Object.prototype.toString.call(v.good_img) === "[object Array]"
  386. ? v.good_img
  387. : (v.good_img || "").split(",");
  388. }
  389. return v;
  390. });
  391. for (let i = 0; i < this.plan_show.feedback.length; i++) {
  392. this.$set(this.plan_show.feedback[i], i, this.plan_show.feedback[i]);
  393. }
  394. },
  395. }
  396. };
  397. </script>
  398. <style lang="scss" scoped>
  399. .project-setPlan-title{
  400. // margin:20px 0 !important;
  401. padding:20px 50px !important;
  402. background: #f3f3f3;
  403. }
  404. </style>