stock.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. <template>
  2. <section class="content">
  3. <h4>股票仓库</h4>
  4. <el-divider></el-divider>
  5. <el-form label-width="80px" class="filter-form">
  6. <el-row>
  7. <el-col :span="4">
  8. <el-form-item label="名称">
  9. <el-input clearable @clear="getData()" v-model="queryParams.name" placeholder="请输入股票名称/代码" size="mini">
  10. </el-input>
  11. </el-form-item>
  12. </el-col>
  13. <el-col :span="5">
  14. <el-form-item label="持仓日期" prop="stock_date">
  15. <el-date-picker size="mini" v-model="queryParams.stock_date" type="date" style="width:100%" placeholder="选择日期"
  16. format="yyyy-MM-dd" value-format="yyyy-MM-dd">
  17. </el-date-picker>
  18. </el-form-item>
  19. </el-col>
  20. <el-col :span="5">
  21. <el-form-item label-width="10" style="margin-left: 10px">
  22. <el-button type="primary" @click="getData" size="mini">筛选</el-button>
  23. <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增股票</el-button>
  24. </el-form-item>
  25. </el-col>
  26. <el-col :span="4">
  27. <el-form-item>
  28. <el-button size="mini" type="success" @click="updateUserStockFlag=true">更新持仓数据</el-button>
  29. </el-form-item>
  30. </el-col>
  31. </el-row>
  32. </el-form>
  33. <el-table v-loading="loading" :data="list" style="width: 100%; margin-top: 10px" height="50vh">
  34. <el-table-column align="center" prop="name" label="股票名称" />
  35. <el-table-column align="center" prop="code" label="股票代码" />
  36. <el-table-column align="center" prop="user_num" label="持仓人数" />
  37. <el-table-column align="center" prop="stock_date" label="持仓日期" />
  38. <el-table-column align="center" prop="date" label="图片">
  39. <template slot-scope="scope">
  40. <img v-if="scope.row.img" :src="scope.row.img" alt="" width="100" height="80">
  41. </template>
  42. </el-table-column>
  43. <el-table-column align="center" prop="desc" label="简介" />
  44. <el-table-column align="center" prop="date" label="操作">
  45. <template slot-scope="scope">
  46. <el-button @click="edit(scope.row.id)" size="mini" type="warning">编辑</el-button>
  47. <!-- <el-button @click="del(scope.row.id)" size="mini" type="danger"
  48. >删除</el-button
  49. > -->
  50. </template>
  51. </el-table-column>
  52. </el-table>
  53. <Page ref="pageButton" :current="form.page" :page_size="form.page_size" :total="total" @pageChange="gopage" />
  54. <!-- 新增股票 -->
  55. <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
  56. <el-form ref="form" :model="form" :rules="rules" label-width="80px">
  57. <el-form-item label="股票名称" prop="name">
  58. <el-input clearable v-model="form.name" placeholder="请输入股票名称"></el-input>
  59. </el-form-item>
  60. <el-form-item label="股票代码" prop="code">
  61. <el-input clearable v-model="form.code" placeholder="请输入代码"></el-input>
  62. </el-form-item>
  63. <el-form-item label="封面图">
  64. <el-upload class="avatar-uploader" action="/api/admin/uploadfile" :show-file-list="false"
  65. :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload">
  66. <div v-if="form.img">
  67. <img :src="form.img" class="avatar" width="100%" />
  68. </div>
  69. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  70. </el-upload>
  71. <el-button v-if="form.img" type="danger" size="mini" @click="form.img=null">删除</el-button>
  72. </el-form-item>
  73. <el-form-item label="股票简介" prop="desc">
  74. <el-input type="textarea" clearable v-model="form.desc" placeholder="请输入股票简介" rows="10"></el-input>
  75. </el-form-item>
  76. </el-form>
  77. <div slot="footer" class="dialog-footer">
  78. <el-button type="primary" @click="submitForm">确 定</el-button>
  79. <el-button @click="open = false">取 消</el-button>
  80. </div>
  81. </el-dialog>
  82. <el-dialog title="更新每日持仓数据" :visible.sync="updateUserStockFlag">
  83. <el-form ref="form" :model="form" label-width="80px">
  84. <el-form-item label="持仓日期" prop="stock_date">
  85. <el-date-picker v-model="form.stock_date" type="date" style="width:100%" placeholder="选择日期"
  86. format="yyyy-MM-dd" value-format="yyyy-MM-dd">
  87. </el-date-picker>
  88. </el-form-item>
  89. </el-form>
  90. <div slot="footer" class="dialog-footer">
  91. <el-button type="primary" @click="updateStockUserNum">确 定</el-button>
  92. <el-button @click="updateUserStockFlag = false">取 消</el-button>
  93. </div>
  94. </el-dialog>
  95. </section>
  96. </template>
  97. <script>
  98. import Page from "../../components/Page";
  99. export default {
  100. components: {
  101. Page,
  102. },
  103. data() {
  104. return {
  105. loading: false,
  106. queryParams: {
  107. page: 1,
  108. },
  109. form: {},
  110. form1: {},
  111. list: [{}, {}],
  112. total: 0,
  113. title: "新增股票",
  114. open: false,
  115. open1: false,
  116. stockList: [],
  117. groupList: [],
  118. rules: {
  119. username: [{
  120. required: true,
  121. message: "请输入用户名",
  122. trigger: "blur"
  123. }, ],
  124. },
  125. rules1: {
  126. fund: [{
  127. required: true,
  128. message: "请输入比赛资金",
  129. trigger: "blur"
  130. }],
  131. match_id: [{
  132. required: true,
  133. message: "请选择比赛",
  134. trigger: "change"
  135. }, ],
  136. username: [{
  137. required: true,
  138. message: "请输入用户名",
  139. trigger: "blur"
  140. }, ],
  141. match_group: [{
  142. required: true,
  143. message: "请选择分组",
  144. trigger: "change"
  145. }, ],
  146. match_status: [{
  147. required: true,
  148. message: "请选择参数状态",
  149. trigger: "change"
  150. }, ],
  151. },
  152. updateUserStockFlag: false
  153. };
  154. },
  155. methods: {
  156. handleAvatarSuccess(res, file) {
  157. this.form.img = res.data.url;
  158. },
  159. beforeAvatarUpload(file) {
  160. return
  161. const isJPG = file.type === "image/jpeg";
  162. const isLt2M = file.size / 1024 / 1024 < 2;
  163. if (!isJPG) {
  164. this.$message.error("上传头像图片只能是 JPG 格式!");
  165. }
  166. if (!isLt2M) {
  167. this.$message.error("上传头像图片大小不能超过 2MB!");
  168. }
  169. return isJPG && isLt2M;
  170. },
  171. del(id) {
  172. this.$confirm("确定删除吗?", "提示", {
  173. type: "warning",
  174. }).then(() => {
  175. this.$api.delStock({
  176. id: id
  177. }).then((res) => {
  178. if (res.data.code == 0) {
  179. this.$message({
  180. message: "删除成功",
  181. type: "success",
  182. });
  183. this.getData();
  184. } else {
  185. this.$message.error(res.data.message);
  186. }
  187. });
  188. });
  189. },
  190. gopage(size) {
  191. if (size) {
  192. this.queryParams.page_size = size;
  193. }
  194. this.queryParams.page = this.$refs.pageButton.page;
  195. this.getData();
  196. },
  197. getData() {
  198. this.loading = true;
  199. this.$api.getStockList(this.queryParams).then((res) => {
  200. console.log(res)
  201. this.list = res.data.data.list;
  202. this.total = res.data.data.total;
  203. this.loading = false;
  204. });
  205. },
  206. handleAdd() {
  207. this.open = true;
  208. this.title = "新增股票";
  209. this.form = {};
  210. },
  211. handleFastAdd() {
  212. this.open1 = true;
  213. this.title = "新增选手";
  214. this.form1 = {
  215. match_status: 1,
  216. match_id: this.matchList[0].id,
  217. };
  218. },
  219. edit(id) {
  220. this.title = "编辑股票信息";
  221. this.$api.getStockInfo({
  222. id: id
  223. }).then((res) => {
  224. console.log(res)
  225. this.form = res.data.data;
  226. this.open = true;
  227. });
  228. },
  229. /** 提交按钮 */
  230. submitForm() {
  231. this.$refs["form"].validate((valid) => {
  232. if (valid) {
  233. if (this.form.id != null) {
  234. this.$api.updateStock(this.form).then((res) => {
  235. if (res.data.code == 0) {
  236. this.msgSuccess("成功!");
  237. this.open = false;
  238. this.getData();
  239. } else {
  240. this.msgError(res.data.message);
  241. }
  242. });
  243. } else {
  244. this.$api.addStock(this.form).then((res) => {
  245. if (res.data.code == 0) {
  246. this.msgSuccess("成功!");
  247. this.open = false;
  248. this.getData();
  249. } else {
  250. this.msgError(res.data.message);
  251. }
  252. });
  253. }
  254. }
  255. });
  256. },
  257. // 创建选手同时创建用户
  258. fastSavePlayer() {
  259. this.$refs["form1"].validate((valid) => {
  260. if (valid) {
  261. if (this.form1.id != null) {
  262. this.$api.fastSavePlayer(this.form1).then((res) => {
  263. if (res.data.code == 0) {
  264. this.msgSuccess("成功!");
  265. this.open = false;
  266. this.getData();
  267. } else {
  268. this.msgError(res.data.message);
  269. }
  270. });
  271. } else {
  272. this.$api.fastSavePlayer(this.form1).then((res) => {
  273. if (res.data.code == 0) {
  274. this.msgSuccess("成功!");
  275. this.open1 = false;
  276. this.getData();
  277. } else {
  278. this.msgError(res.data.message);
  279. }
  280. });
  281. }
  282. }
  283. });
  284. },
  285. updateStockUserNum() {
  286. this.loading = true
  287. this.$api.updateStockUserNum(this.form).then(res => {
  288. this.loading = false
  289. this.updateUserStockFlag = false
  290. this.getData()
  291. })
  292. }
  293. },
  294. created() {
  295. this.getData();
  296. },
  297. };
  298. </script>