index.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  1. <!-- -->
  2. <template>
  3. <div class="m-container">
  4. <h2>
  5. <div class="squrt"></div>
  6. 更换列表
  7. </h2>
  8. <div class="m-core">
  9. <save-form
  10. :inline="true"
  11. :model="searchForm"
  12. @submit="search"
  13. @reset="onReSet"
  14. ref='searchForm'
  15. >
  16. <el-form-item prop="search">
  17. <el-input
  18. v-model.trim="searchForm.search"
  19. clearable
  20. @keyup.enter.native="search"
  21. placeholder="流水号 订单号 学生姓名"
  22. ></el-input>
  23. </el-form-item>
  24. <el-form-item prop="organIdList">
  25. <el-select
  26. class="multiple"
  27. v-model.trim="searchForm.organIdList"
  28. filterable
  29. clearable
  30. placeholder="请选择分部"
  31. >
  32. <el-option
  33. v-for="(item, index) in selects.branchs"
  34. :key="index"
  35. :label="item.name"
  36. :value="item.id"
  37. ></el-option>
  38. </el-select>
  39. </el-form-item>
  40. <el-form-item prop="cooperationOrganId">
  41. <el-select
  42. clearable
  43. filterable
  44. placeholder="请选择所属学校"
  45. v-model="searchForm.cooperationOrganId"
  46. >
  47. <el-option
  48. v-for="(item, index) in cooperations"
  49. :key="index"
  50. :label="item.name"
  51. :value="item.id"
  52. ></el-option>
  53. </el-select>
  54. </el-form-item>
  55. <!-- <el-form-item prop="organId">
  56. <el-select class="multiple"
  57. v-model.trim="searchForm.organId"
  58. filterable
  59. clearable
  60. placeholder="销售类型">
  61. <el-option v-for="(item,index) in saleStatus"
  62. :key="index"
  63. :label="item.label"
  64. :value="item.value"></el-option>
  65. </el-select>
  66. </el-form-item> -->
  67. <el-form-item prop="resetDate">
  68. <el-date-picker
  69. style="width: 410px"
  70. v-model.trim="searchForm.resetDate"
  71. type="daterange"
  72. value-format="yyyy-MM-dd"
  73. range-separator="至"
  74. start-placeholder="销售开始日期"
  75. end-placeholder="销售结束日期"
  76. :picker-options="{ firstDayOfWeek: 1 }"
  77. >
  78. </el-date-picker>
  79. </el-form-item>
  80. <el-form-item>
  81. <el-button native-type="submit" type="danger">搜索</el-button>
  82. <el-button native-type="reset" type="primary">重置</el-button>
  83. </el-form-item>
  84. </save-form>
  85. <div class="tableWrap">
  86. <el-table
  87. style="width: 100%"
  88. :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
  89. :data="tableList"
  90. >
  91. <el-table-column type="expand">
  92. <template slot-scope="props">
  93. <el-form
  94. label-position="left"
  95. inline
  96. label-width="120px"
  97. class="demo-table-expand"
  98. >
  99. <el-form-item label="交易流水号">
  100. <copy-text>{{ props.row.transNo }}</copy-text>
  101. </el-form-item>
  102. <el-form-item label="订单号">
  103. <copy-text>{{ props.row.orderNo }}</copy-text>
  104. </el-form-item>
  105. <el-form-item label="更换金额(元)">
  106. <span>{{ props.row.changeMusicalPrice | moneyFormat }}</span>
  107. </el-form-item>
  108. <el-form-item label="乐团主管">
  109. <span>{{ props.row.eduTeacher }}</span>
  110. </el-form-item>
  111. <el-form-item label="交易方式">
  112. <span>{{
  113. props.row.paymentChannel | paymentChannelStatus
  114. }}</span>
  115. </el-form-item>
  116. </el-form>
  117. </template>
  118. </el-table-column>
  119. <el-table-column align="center" prop="studentName" label="学员姓名">
  120. <template slot-scope="scope">
  121. <div>
  122. <copy-text>{{ scope.row.studentName }}</copy-text>
  123. </div>
  124. </template>
  125. </el-table-column>
  126. <el-table-column align="center" prop="organName" label="所属分部">
  127. <template slot-scope="scope">
  128. <div>
  129. <copy-text>{{ scope.row.organName }}</copy-text>
  130. </div>
  131. </template>
  132. </el-table-column>
  133. <el-table-column
  134. align="center"
  135. prop="cooperationOrganName"
  136. label="所属学校"
  137. >
  138. <template slot-scope="scope">
  139. <div>
  140. <copy-text>{{ scope.row.cooperationOrganName }}</copy-text>
  141. </div>
  142. </template>
  143. </el-table-column>
  144. <el-table-column align="center" prop="studentId" label="原乐器">
  145. <template slot-scope="scope">
  146. <div v-if="scope.row.originalMusicalGoods">
  147. {{ scope.row.originalMusicalGoods.name }}
  148. </div>
  149. </template>
  150. </el-table-column>
  151. <el-table-column align="center"
  152. prop="studentId"
  153. label="原教辅">
  154. <!-- :formatter="(row)=>{return accessoriesFormatter(row.originalAccessoriesGoods)}" -->
  155. <template slot-scope="scope">
  156. <overflow-text width="100%" :text="accessoriesFormatter(scope.row.originalAccessoriesGoods)"></overflow-text>
  157. </template>
  158. </el-table-column>
  159. <el-table-column
  160. align="center"
  161. prop="studentId"
  162. label="原支付金额(元)"
  163. >
  164. <template slot-scope="scope">
  165. <div>
  166. {{ scope.row.originalMusicalPrice | moneyFormat }}
  167. </div>
  168. </template>
  169. </el-table-column>
  170. <el-table-column align="center" prop="studentId" label="更换乐器">
  171. <template slot-scope="scope">
  172. <div v-if="scope.row.changeMusicalGoods">
  173. {{ scope.row.changeMusicalGoods.name }}
  174. </div>
  175. </template>
  176. </el-table-column>
  177. <el-table-column align="center"
  178. label="更换教辅">
  179. <!-- :formatter="(row)=>{return accessoriesFormatter(row.changeAccessoriesGoods)}" -->
  180. <template slot-scope="scope">
  181. <overflow-text width="100%" :text="accessoriesFormatter(scope.row.changeAccessoriesGoods)"></overflow-text>
  182. </template>
  183. </el-table-column>
  184. <el-table-column align="center"
  185. prop="studentId"
  186. label="差价(元)">
  187. <template slot-scope="scope">
  188. <div>
  189. {{
  190. (scope.row.changeMusicalPrice +
  191. scope.row.changeAccessoriesPrice -
  192. (scope.row.originalMusicalPrice +
  193. scope.row.originalAccessoriesPrice))
  194. | moneyFormat
  195. }}
  196. </div>
  197. </template>
  198. </el-table-column>
  199. <el-table-column align="center" prop="studentId" label="成本差(元)">
  200. <template slot-scope="scope">
  201. <div>
  202. {{ scope.row.costMargin | moneyFormat }}
  203. </div>
  204. </template>
  205. </el-table-column>
  206. <el-table-column
  207. align="center"
  208. prop="musicGroupName"
  209. label="乐团"
  210. ></el-table-column>
  211. <el-table-column align="center" prop="studentId" label="销售日期">
  212. <template slot-scope="scope">
  213. <div>
  214. {{ scope.row.sellTime | dayjsFormat }}
  215. </div>
  216. </template>
  217. </el-table-column>
  218. <el-table-column align="center" prop="studentId" label="操作">
  219. <template slot-scope="scope">
  220. <div>
  221. <el-button type="text" @click="reset(scope.row)"
  222. >修改</el-button
  223. >
  224. </div>
  225. </template>
  226. </el-table-column>
  227. </el-table>
  228. <pagination
  229. sync
  230. :total.sync="rules.total"
  231. :page.sync="rules.page"
  232. :limit.sync="rules.limit"
  233. :page-sizes="rules.page_size"
  234. @pagination="getList"
  235. />
  236. </div>
  237. </div>
  238. <resetSound
  239. :show="show"
  240. @closeReset="closeReset"
  241. @getList="getList"
  242. :item="activeRow"
  243. />
  244. </div>
  245. </template>
  246. <script>
  247. import axios from "axios";
  248. import { getToken } from "@/utils/auth";
  249. import pagination from "@/components/Pagination/index";
  250. import load from "@/utils/loading";
  251. import { getTeacher, getEmployeeOrgan, getCooperation } from "@/api/buildTeam";
  252. import { getSubjectChangeList } from "@/api/businessManager";
  253. import resetSound from "./resetSound";
  254. import { saleStatus } from "@/utils/searchArray";
  255. import cleanDeep from "clean-deep";
  256. import { getNowDateAndMonday, getNowDateAndSunday } from "@/utils/utils";
  257. import { closeSalaryConfirm } from "@/api/journal";
  258. import { getTimes } from "@/utils"
  259. let nowTime = new Date();
  260. nowTime =
  261. nowTime.getFullYear() +
  262. "-" +
  263. (nowTime.getMonth() + 1) +
  264. "-" +
  265. nowTime.getDate();
  266. export default {
  267. components: { pagination, resetSound },
  268. data() {
  269. return {
  270. searchForm: {
  271. search: null,
  272. resetDate: [],
  273. organIdList: null,
  274. cooperationOrganId: null,
  275. },
  276. show: false,
  277. teacherList: [],
  278. tableList: [],
  279. organList: [],
  280. cooperations: [],
  281. saleStatus,
  282. activeRow: null,
  283. rules: {
  284. // 分页规则
  285. limit: 10, // 限制显示条数
  286. page: 1, // 当前页
  287. total: 0, // 总条数
  288. page_size: [10, 20, 40, 50], // 选择限制显示条数
  289. },
  290. };
  291. },
  292. //生命周期 - 创建完成(可以访问当前this实例)
  293. created() {},
  294. //生命周期 - 挂载完成(可以访问DOM元素)
  295. mounted() {
  296. getCooperation({ rows: 1000 }).then((res) => {
  297. if (res.code == 200) {
  298. this.cooperations = res.data.rows;
  299. }
  300. });
  301. this.$store.dispatch("setBranchs");
  302. // getEmployeeOrgan().then((res) => {
  303. // if (res.code == 200) {
  304. // this.organList = res.data;
  305. // }
  306. // });
  307. // 获取分部
  308. this.init();
  309. },
  310. activated() {
  311. // this.init();
  312. },
  313. methods: {
  314. init() {
  315. if (this.searchForm.resetDate?.length < 1) {
  316. this.searchForm.resetDate = [];
  317. this.searchForm.resetDate.push(getNowDateAndMonday(nowTime));
  318. this.searchForm.resetDate.push(getNowDateAndSunday(nowTime));
  319. }
  320. this.getList();
  321. },
  322. getList() {
  323. const { resetDate, ...rest } = this.searchForm;
  324. let params = {
  325. ...rest,
  326. ...getTimes(resetDate, ["startTime", "endTime"]),
  327. page: this.rules.page,
  328. rows: this.rules.limit,
  329. };
  330. // params.rows = this.rules.limit;
  331. // params.page = this.rules.page;
  332. // if (this.resetDate && this.resetDate.length > 1) {
  333. // params.startTime = this.resetDate[0];
  334. // params.endTime = this.resetDate[1];
  335. // } else {
  336. // params.startTime = null;
  337. // params.endTime = null;
  338. // }
  339. getSubjectChangeList(cleanDeep(params)).then((res) => {
  340. if (res.code === 200) {
  341. this.rules.total = res.data.total;
  342. this.tableList = res.data.rows;
  343. }
  344. });
  345. },
  346. reset(row) {
  347. this.activeRow = row;
  348. this.show = true;
  349. },
  350. closeReset() {
  351. this.show = false;
  352. },
  353. search() {
  354. this.rules.page = 1;
  355. this.getList();
  356. },
  357. onReSet() {
  358. this.$refs.searchForm.resetFields();
  359. console.log(this.searchForm)
  360. this.searchForm.startTime = null;
  361. this.searchForm.endTime = null;
  362. this.search();
  363. },
  364. accessoriesFormatter(accessories) {
  365. if (accessories && accessories.length > 0) {
  366. let arr = accessories.map((res) => {
  367. return res.name;
  368. });
  369. return arr.join(",");
  370. } else {
  371. return "";
  372. }
  373. },
  374. },
  375. watch: {},
  376. };
  377. </script>
  378. <style lang='scss' scoped>
  379. /deep/.demo-table-expand .el-form-item {
  380. margin-right: 0;
  381. margin-bottom: 0;
  382. width: 50%;
  383. }
  384. /deep/.demo-table-expand label {
  385. color: #99a9bf;
  386. }
  387. </style>