copy_Setting.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. <template>
  2. <div style="overflow-y:auto;overflow-x:hidden;height:92%;width:100%;margin-top:10px">
  3. <Toptitle title="项目设置">
  4. </Toptitle>
  5. <div style="padding: 10px" class="setting" >
  6. <Card :padding="0" v-for="(item,index) in content" :key="index" >
  7. <Input slot="title" v-if="item.title_type" @on-blur="change_title(item,1)" v-model="item.title" :autofocus='true' style="width:80%"></Input>
  8. <p slot="title" v-else @click="change_title(item)">{{item.title}}</p>
  9. <a @click="upload(item)" class="upload_pic" v-if="item.content[0].sub_state!==4">保存</a>
  10. <div class="card_content">
  11. <div :title="_item.title" v-for="(_item,_index) in item.content" :key="_index" >
  12. <!-- 开关 -->
  13. <div v-if="_item.sub_state == 2" style="display:flex;justify-content: space-between;margin:15px 0;">
  14. <label>{{_item.title}}</label> <i-switch :value="_item.value==1?true:false" slot="extra" @on-change="change($event,_index,item)" style="margin-right:30px" />
  15. </div>
  16. <!-- 输入框 -->
  17. <!-- <div v-for="(_item,_index) in item.content" :key="_index" style="position: relative;top:-40px;display:flex;margin-top:20px"> -->
  18. <div v-if="_item.sub_state == 1" style="margin:10px 0">
  19. <label >{{_item.title}}:</label> <Input v-model="_item.value" style="width:250px;margin-left:20px"/>
  20. </div>
  21. <!-- 图片 -->
  22. <div class="product-add" v-if="_item.sub_state == 3">
  23. <label>{{_item.title}}:</label>
  24. <div
  25. class="items"
  26. v-if="_item.value"
  27. >
  28. <img
  29. @click="looks(_item.value)"
  30. :src="$store.state.ip + _item.value"
  31. alt=""
  32. />
  33. <Icon
  34. size="20"
  35. @click="delItems(_item)"
  36. class="delete-img"
  37. type="ios-close-circle"
  38. />
  39. </div>
  40. <div class="add-items" v-show="!_item.value">
  41. <div class="_item">
  42. <Icon size="50" type="ios-add" />
  43. </div>
  44. <input
  45. @change="changeIpt($event,_index,index)"
  46. type="file"
  47. class="ipt"
  48. />
  49. </div>
  50. </div>
  51. <!-- 跳转页面 -->
  52. <div v-if="_item.sub_state == 4" style="text-align:center;display: flex;flex-direction: column;align-items: center;margin-top:30px">
  53. <Button type="primary" size='large' @click="$router.push(_item.value)">{{_item.title}}</Button>
  54. </div>
  55. </div>
  56. </div>
  57. <Tooltip max-width="200" :content="item.remark"
  58. style="min-width:200px;position:absolute;right:-168px;bottom:9px;cursor: pointer">
  59. <Icon type="md-help-circle" size="24" />
  60. </Tooltip>
  61. </Card>
  62. <!-- <Card :padding="0" v-for="(item,index) in switch_list" :key="index">
  63. <Input slot="title" v-if="item.title_type" @on-blur="change_title(item,1)" v-model="item.title" autofocus='true' style="width:90%"></Input>
  64. <p slot="title" v-else @click="change_title(item)">{{item.title}}</p>
  65. <CellGroup>
  66. <Cell :title="_item.title" v-for="(_item,_index) in item.content" :key="_index">
  67. <i-switch v-model="_item.state" slot="extra" @on-change="change($event,_index,item)" />
  68. </Cell>
  69. </CellGroup>
  70. <Tooltip max-width="200" :content="item.remark"
  71. style="min-width:200px;position:absolute;right:-168px;top:169px;cursor: pointer">
  72. <Icon type="md-help-circle" size="24" />
  73. </Tooltip>
  74. </Card>
  75. <Card :title="item.title" :padding="0" v-for="(item,index) in logo_list" :key="index" >
  76. <Input slot="title" v-if="item.title_type" @on-blur="change_title(item,1)" v-model="item.title" autofocus='true' style="width:80%"></Input>
  77. <p slot="title" v-else @click="change_title(item)">{{item.title}}</p>
  78. <a @click="upload(item)" class="upload_pic">上传</a>
  79. <div class="product-add">
  80. <div
  81. class="items"
  82. v-if="item.content"
  83. >
  84. <img
  85. @click="looks(item.content)"
  86. :src="$store.state.ip + item.content"
  87. alt=""
  88. />
  89. <Icon
  90. size="20"
  91. @click="delItems(item)"
  92. class="delete-img"
  93. type="ios-close-circle"
  94. />
  95. </div>
  96. <div class="add-items" v-show="!item.content">
  97. <div class="_item">
  98. <Icon size="50" type="ios-add" />
  99. </div>
  100. <input
  101. @change="changeIpt($event,index)"
  102. type="file"
  103. class="ipt"
  104. />
  105. </div>
  106. </div>
  107. <Tooltip max-width="200" :content="item.remark"
  108. style="min-width:200px;position:absolute;right:-168px;top:169px;cursor: pointer">
  109. <Icon type="md-help-circle" size="24" />
  110. </Tooltip>
  111. </Card>
  112. <Card v-for="(item,index) in text_list" :key="index" :title="item.title" style="width:520px">
  113. <Input slot="title" v-if="item.title_type" @on-blur="change_title(item,1)" v-model="item.title" autofocus='true' style="width:80%"></Input>
  114. <p slot="title" v-else @click="change_title(item)">{{item.title}}</p>
  115. <a @click="upload(item)" class="upload_text">保存</a>
  116. <div v-for="(_item,_index) in item.content" :key="_index" style="position: relative;top:-40px;display:flex;margin-top:20px">
  117. <label style="width:80px;margin-right:60px">{{_item.title}}:</label> <Input v-model="_item.value" />
  118. </div>
  119. <Tooltip max-width="200" :content="item.remark"
  120. style="min-width:200px;position:absolute;right:-168px;top:169px;cursor: pointer">
  121. <Icon type="md-help-circle" size="24" />
  122. </Tooltip>
  123. </Card> -->
  124. </div>
  125. </div>
  126. </template>
  127. <script>
  128. export default {
  129. data(){
  130. return {
  131. switchValue: true,
  132. switch1:true,
  133. tempItem:{
  134. url:[],
  135. },
  136. logo_title:'',
  137. content:[],
  138. logo_title:{},
  139. tempItem_op:{},
  140. logo_remark:'',
  141. switch_list:[],
  142. logo_list:[],
  143. text_list:[],
  144. }
  145. },
  146. mounted(){
  147. this.axios.get('/api/basics_config_list').then(res=>{
  148. this.content = res.data;
  149. this.content.forEach(item =>{//sub_type 1 文本 2 开关 3 图片
  150. item.title_type = false;
  151. if(item.sub_type == 2){
  152. this.switch_list.push(item);
  153. this.switch_list.forEach(item=>{
  154. })
  155. }
  156. if(item.sub_type == 3){
  157. this.logo_list.push(item);
  158. this.logo_title = item.title
  159. this.logo_remark = item.remark
  160. this.tempItem_op = item
  161. this.tempItem.url = item.content.split(',')
  162. this.logo_list.forEach(item=>{
  163. // item.title_type = false;
  164. })
  165. }
  166. if(item.sub_type == 1){
  167. this.text_list.push(item);
  168. this.text_list.forEach(item=>{
  169. // item.title_type = false;
  170. })
  171. }
  172. })
  173. })
  174. },
  175. methods:{
  176. change_title(item,type){
  177. item.title_type = !item.title_type;
  178. this.$forceUpdate();
  179. if(type){
  180. this.upload(item)
  181. }
  182. },
  183. change(e,_index,item){
  184. item.content[_index].value = e?1:0;
  185. this.axios.post('/api/basics_config_edit',item).then(res=>{
  186. console.log(res)
  187. })
  188. },
  189. upload(item){
  190. this.axios.post('/api/basics_config_edit',item).then(res=>{
  191. if(res.code == 200){
  192. this.$Message.success(res.msg)
  193. }
  194. })
  195. },
  196. looks(img) {
  197. const array = [{ img_url: img }];
  198. this.$previewImg({
  199. list: array,
  200. baseUrl: this.$store.state.ip,
  201. baseImgField: "img_url",
  202. baseTitleField: "",
  203. });
  204. },
  205. delItems(item) {
  206. item.value = null;
  207. },
  208. changeIpt(e,_index,index) {
  209. let file = e.target.files[0];
  210. this.postImg(file,_index,index);
  211. e.target.value = null;
  212. },
  213. postImg(file, _index,index) {
  214. let formData = new FormData();
  215. formData.append("file", file);
  216. this.axios.post("/api/upload_pic", formData).then((res) => {
  217. this.$nextTick(() => {
  218. this.content[index].content[_index].value= res.data.url;
  219. // this.$forceUpdate();
  220. });
  221. });
  222. },
  223. }
  224. }
  225. </script>
  226. <style scoped lang='scss'>
  227. .setting{
  228. margin-top:10px ;
  229. display: flex;
  230. flex-wrap: wrap;
  231. align-items: flex-start;
  232. }
  233. .product-add {
  234. margin: 10px 0;
  235. // position: relative;
  236. // top: 0
  237. // height: 140px;
  238. .ipt {
  239. position: absolute;
  240. width: 50px;
  241. height: 50px;
  242. opacity: 0;
  243. cursor: pointer;
  244. outline: none;
  245. // top: 0;
  246. // left: 0;
  247. }
  248. .add-items {
  249. position: relative;
  250. left: 25px;
  251. top: 20px;
  252. // transform: translate(-50%,-50%);
  253. width: 40px;
  254. height: 40px;
  255. border: 1px dotted #e7e7e7;
  256. border-radius: 5px;
  257. display: flex;
  258. justify-content: center;
  259. align-items: center;
  260. overflow: hidden;
  261. background: #f4f5f7;
  262. .item {
  263. width: 46px;
  264. height: 46px;
  265. background: #3764ff;
  266. opacity: 0.6;
  267. display: flex;
  268. justify-content: center;
  269. align-items: center;
  270. border-radius: 50%;
  271. color: #fff;
  272. }
  273. }
  274. .items {
  275. width: 100px;
  276. height: 100px;
  277. // margin-bottom: 10px;
  278. // display: flex;
  279. // justify-content: center;
  280. // align-items: center;
  281. // margin-right: 10px;
  282. border-radius: 5px;
  283. // position: relative;
  284. // left:50%;
  285. // top: 40%;
  286. // transform: translate(-50%,-50%);
  287. img {
  288. max-width: 100px;
  289. max-height: 100px;
  290. }
  291. }
  292. }
  293. /deep/ .ivu-card{
  294. background: #f8f8f9;
  295. width: 365px;
  296. // height: auto;
  297. margin: 10px;
  298. border-radius: 20px;
  299. position: relative;
  300. .ivu-card:hover{
  301. box-shadow: darkgrey 2px 2px 2px 2px ;//边框阴影
  302. }
  303. }
  304. /deep/ .ivu-card-head{
  305. border-bottom: none;
  306. height: auto;
  307. p{
  308. font-weight: 800;
  309. }
  310. }
  311. /deep/ .ivu-card-body{
  312. display: flex;
  313. flex-direction: column;
  314. }
  315. .delete-img{
  316. position: relative;
  317. top:-105px;
  318. left: 90px;
  319. }
  320. .upload_pic{
  321. position: relative;
  322. top: -44px;
  323. right: -310px;
  324. color: red;
  325. }
  326. .upload_text{
  327. position: relative;
  328. top: -60px;
  329. right: -444px;
  330. color: red;
  331. }
  332. .card_content{
  333. position:relative;
  334. top: -30px;
  335. left: 10px;
  336. display: flex;
  337. flex-direction: column;
  338. }
  339. // /deep/ .ivu-cell-group{
  340. // position: relative;
  341. // top: -10px;
  342. // }
  343. </style>