index.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
  4. <el-form-item label="" prop="channel">
  5. <el-input
  6. v-model="queryParams.channel"
  7. placeholder="请输入公众号"
  8. clearable
  9. size="small"
  10. style="width: 200px"
  11. @keyup.enter.native="handleQuery"
  12. />
  13. </el-form-item>
  14. <el-form-item label="" prop="platformName">
  15. <el-select v-model="queryParams.platformName" placeholder="请选择书城" size="small" filterable style="width: 100%" clearable @keyup.enter.native="handleQuery">
  16. <el-option
  17. v-for="item in bookCityData"
  18. :key="item.id"
  19. :label="item.platformName"
  20. :value="item.platformName">
  21. </el-option>
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item label="" prop="qwName">
  25. <el-input
  26. v-model="queryParams.qwName"
  27. placeholder="企微号"
  28. clearable
  29. size="small"
  30. style="width: 200px"
  31. @keyup.enter.native="handleQuery"
  32. />
  33. </el-form-item>
  34. <el-form-item label="" prop="resourceName">
  35. <el-input
  36. v-model="queryParams.resourceName"
  37. placeholder="资源名称"
  38. clearable
  39. size="small"
  40. style="width: 200px"
  41. @keyup.enter.native="handleQuery"
  42. />
  43. </el-form-item>
  44. <el-form-item prop="startTime" >
  45. <el-date-picker
  46. v-model="queryParams.startTime"
  47. type="date"
  48. size="small"
  49. value-format="yyyy-MM-dd"
  50. placeholder="选择开始日期">
  51. </el-date-picker>
  52. </el-form-item>
  53. <el-form-item prop="endTime" >
  54. <el-date-picker
  55. v-model="queryParams.endTime"
  56. type="date"
  57. size="small"
  58. value-format="yyyy-MM-dd"
  59. placeholder="选择结束日期">
  60. </el-date-picker>
  61. </el-form-item>
  62. <el-form-item>
  63. <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  64. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  65. </el-form-item>
  66. </el-form>
  67. <el-row :gutter="10" class="mb8" align="middle">
  68. <el-col :span="1.5">
  69. <el-button type="primary" size="small" @click="addHandle">新增企微映射</el-button>
  70. </el-col>
  71. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  72. </el-row>
  73. <el-table :data="dataList" size="mini" :border="true">
  74. <el-table-column label="ID" prop="id" width="55" align="center"/>
  75. <el-table-column label="资源名称" prop="resourceName" align="center" width="140" :show-overflow-tooltip="true"/>
  76. <el-table-column label="公众号appName" prop="mpAppName" width="120" align="center"/>
  77. <el-table-column label="公众号appId" prop="mpAppId" align="center" width="160"/>
  78. <el-table-column label="书城名称" prop="platformName" align="center" width="100"/>
  79. <el-table-column label="书城key" prop="platformKey" align="center" width="100"/>
  80. <el-table-column label="企微appName" prop="qwAppName" align="center" width="150"/>
  81. <el-table-column label="企微appId" prop="qwAppId" align="center" width="160" :show-overflow-tooltip="true"/>
  82. <el-table-column label="开始时间" prop="startTime" align="center" width="100"/>
  83. <el-table-column label="结束时间" prop="endTime" align="center" width="100"/>
  84. <el-table-column label="创建时间" prop="createTime" align="center" width="135"/>
  85. <el-table-column label="操作" class-name="small-padding fixed-width">
  86. <template slot-scope="scope">
  87. <el-button
  88. size="mini"
  89. type="text"
  90. icon="el-icon-edit"
  91. style="margin-right: 10px"
  92. @click="handleEditTen(scope.row)"
  93. >修改</el-button>
  94. <el-popconfirm
  95. title="确定删除吗?"
  96. @confirm="handleDel(scope.row.id)"
  97. >
  98. <el-button slot="reference" type="text" size="mini" style="color: red" icon="el-icon-delete">删除</el-button>
  99. </el-popconfirm>
  100. </template>
  101. </el-table-column>
  102. </el-table>
  103. <pagination
  104. v-show="total > 0"
  105. :total="total"
  106. :page.sync="queryParams.pageNum"
  107. :limit.sync="queryParams.pageSize"
  108. @pagination="getList"
  109. />
  110. <!-- 新增修改 -->
  111. <el-dialog
  112. :title="title"
  113. :visible.sync="visible"
  114. width="450px"
  115. append-to-body
  116. >
  117. <el-form :model="qwParamsForm" :rules="qwRulesType" ref="platFormQw" label-width="80px">
  118. <el-form-item label="资源名称" prop="resourceName">
  119. <el-select
  120. v-model="qwParamsForm.resourceName"
  121. filterable
  122. remote
  123. reserve-keyword
  124. placeholder="请输入关键词"
  125. :remote-method="remoteMethod"
  126. :loading="loading"
  127. >
  128. <el-option
  129. v-for="item in options"
  130. :key="item.id"
  131. :label="item.resourceName"
  132. :value="item.resourceName">
  133. </el-option>
  134. </el-select>
  135. </el-form-item>
  136. <el-form-item label="书城" prop="platformKey" >
  137. <el-select v-model="qwParamsForm.platformKey" placeholder="请选择" filterable style="width: 100%" clearable>
  138. <el-option
  139. v-for="item in bookCityData"
  140. :key="item.id"
  141. :label="item.platformName"
  142. :value="item.platformKey">
  143. </el-option>
  144. </el-select>
  145. </el-form-item>
  146. <el-form-item label="公众号" prop="mpAppData" >
  147. <el-select v-model="qwParamsForm.mpAppData" placeholder="请选择" filterable style="width: 100%" clearable>
  148. <el-option
  149. v-for="item in gzhData"
  150. :key="item.id"
  151. :label="item.appName"
  152. :value="item.appName + '_' + item.appId">
  153. </el-option>
  154. </el-select>
  155. </el-form-item>
  156. <el-form-item label="企微" prop="qwAppData" >
  157. <el-select v-model="qwParamsForm.qwAppData" placeholder="请选择" filterable style="width: 100%" clearable>
  158. <el-option
  159. v-for="item in qwData"
  160. :key="item.id"
  161. :label="item.appName"
  162. :value="item.appName + '_' + item.appId">
  163. </el-option>
  164. </el-select>
  165. </el-form-item>
  166. <el-form-item label="开始时间" prop="startTime" >
  167. <el-date-picker
  168. v-model="qwParamsForm.startTime"
  169. type="date"
  170. value-format="yyyy-MM-dd"
  171. placeholder="选择日期">
  172. </el-date-picker>
  173. </el-form-item>
  174. <el-form-item label="结束时间" prop="endTime" >
  175. <el-date-picker
  176. v-model="qwParamsForm.endTime"
  177. type="date"
  178. value-format="yyyy-MM-dd"
  179. placeholder="选择日期">
  180. </el-date-picker>
  181. </el-form-item>
  182. </el-form>
  183. <span slot="footer" class="dialog-footer">
  184. <el-button @click="qwParamsForm = {platformKey: 'YOU_ZI'};visible = false">取 消</el-button>
  185. <el-button type="primary" @click="submit('platFormQw')">确 定</el-button>
  186. </span>
  187. </el-dialog>
  188. </div>
  189. </template>
  190. <script>
  191. import { getQwChanelList, addOrEditQwChanel, getChanelList, getBookPlatformAll, delQwChanel, queryApi } from '@/api/accounts/qwMapping'
  192. export default {
  193. data () {
  194. return {
  195. queryParams: {
  196. pageNum: 1,
  197. pageSize: 20,
  198. channel: null
  199. },
  200. dataList: [],
  201. total: 0,
  202. showSearch: true,
  203. visible: false,
  204. qwParamsForm: {
  205. platformKey: 'YOU_ZI'
  206. },
  207. qwRulesType: {
  208. resourceName: [{ required: true, message: '请输入资源名称', trigger: 'blur' }],
  209. platformKey: [{ required: true, message: '请选择书城', trigger: 'blur' }]
  210. },
  211. title: '新增企微映射',
  212. bookCityData: [],
  213. gzhData: [],
  214. qwData: [],
  215. loading: false,
  216. options: []
  217. }
  218. },
  219. watch: {
  220. 'qwParamsForm.platformKey': {
  221. handler(val) {
  222. if (val) {
  223. getChanelList({ platformKey: val }).then(res => {
  224. let data = res.data
  225. if (data && Array.isArray(data)) {
  226. this.gzhData = data.filter(item => item.type === 0)
  227. this.qwData = data.filter(item => item.type === 1)
  228. }
  229. })
  230. }
  231. },
  232. immediate: true,
  233. },
  234. },
  235. created() {
  236. this.getList()
  237. this.getAll()
  238. },
  239. methods: {
  240. remoteMethod(query) {
  241. if (query !== '') {
  242. this.loading = true;
  243. queryApi({resourceName: query}).then(res => {
  244. this.options = res.data
  245. this.loading = false;
  246. }).catch(err => this.loading = false)
  247. } else {
  248. this.options = [];
  249. }
  250. },
  251. getAll () {
  252. getBookPlatformAll().then(res => {
  253. this.bookCityData = res.data
  254. })
  255. },
  256. getList () {
  257. getQwChanelList(this.queryParams).then(res => {
  258. let data = res.data
  259. this.total = data.total
  260. let records = data.records
  261. this.dataList = records
  262. })
  263. },
  264. handleQuery() {
  265. this.queryParams = { ...this.queryParams, pageNum: 1 }
  266. this.getList();
  267. },
  268. resetQuery() {
  269. this.resetForm("queryForm");
  270. this.getList();
  271. },
  272. addHandle() {
  273. this.visible = true
  274. this.title = '新增企微映射'
  275. },
  276. handleEditTen(row) {
  277. console.log('修改--->', row)
  278. this.title = '修改企微映射'
  279. const { id, endTime, startTime, mpAppId, mpAppName, platformKey, qwAppId, qwAppName, resourceName} = row
  280. this.qwParamsForm = { startTime, id, endTime, platformKey, resourceName }
  281. if (mpAppId && mpAppName) {
  282. this.$set(this.qwParamsForm, 'mpAppData', mpAppName + '_' + mpAppId);
  283. }
  284. if (qwAppId && qwAppName) {
  285. this.$set(this.qwParamsForm, 'qwAppData', qwAppName + '_' + qwAppId);
  286. }
  287. this.visible = true
  288. },
  289. handleDel(id) {
  290. delQwChanel({id}).then(res => {
  291. if (res.data) {
  292. this.msgSuccess("删除成功");
  293. this.getList()
  294. }
  295. })
  296. },
  297. submit(formName) {
  298. this.$refs[formName].validate((valid) => {
  299. if (valid) {
  300. console.log('11111', this.qwParamsForm);
  301. if (Object.keys(this.qwParamsForm).includes('mpAppData') || Object.keys(this.qwParamsForm).includes('qwAppData')) {
  302. let params = JSON.parse(JSON.stringify(this.qwParamsForm))
  303. if (Object.keys(this.qwParamsForm).includes('mpAppData')) {
  304. params.mpAppName = params.mpAppData.split('_')[0]
  305. params.mpAppId = params.mpAppData.split('_')[1]
  306. delete params.mpAppData
  307. }
  308. if (Object.keys(this.qwParamsForm).includes('qwAppData')) {
  309. params.qwAppName = params.qwAppData.split('_')[0]
  310. params.qwAppId = params.qwAppData.split('_')[1]
  311. delete params.qwAppData
  312. }
  313. addOrEditQwChanel(params).then(res => {
  314. console.log('addOrEditQwChanel---->', res)
  315. if (res.data) {
  316. if (this.qwParamsForm.id) { // 修改
  317. this.msgSuccess("新增成功");
  318. } else {
  319. this.msgSuccess("修改成功");
  320. }
  321. this.getList()
  322. this.qwParamsForm = { platformKey: 'YOU_ZI' }
  323. this.visible = false
  324. }
  325. })
  326. } else {
  327. this.$message.error('公众号和企微必须选择一个');
  328. }
  329. } else {
  330. return false;
  331. }
  332. });
  333. }
  334. }
  335. }
  336. </script>